按属性值
For by property value
本文关键字:属性 更新时间:2023-09-26
我有一个类似的数组
var myArray = [
{name: 'A', y: 10},
{name: 'B', y: 20},
{name: 'C', y: 5}
];
是否可以对数组进行排序并保留原始索引?
示例:
按y属性显示数组:
'C',"A",'B'
按索引显示数组:
"A",'B','C'
我希望你能帮助我。谢谢你的阅读。
您可以映射数组以保留数组对象中的索引:
var myArray = [
{name: 'A', y: 10},
{name: 'B', y: 20},
{name: 'C', y: 5}
];
myArray = myArray.map(function(item, index) {
item.index = index;
return item;
});
然后排序:
myArray.sort(function(i1, i2) {
return i1.index > i2.index;
});
myArray.sort(function(i1, i2) {
return i1.y > i2.y;
});
您可以编写一个函数来按属性排序:
var sortBy = function(prop){
return function(el1, el2){
return el1[prop]>el2[prop];
};
};
则可以使用myArray.sort(sortBy('y'))
按数组的属性y
排序,或使用myArray.sort(sortBy('name'))
按name
排序。您可以使用原始数组通过索引进行访问。或者你可以像madox2所说的那样添加一个名为index的新属性。
在负责排序类型的函数中使用map进行排序。返回一个新数组,其中包含对原始对象的引用。
function sort(array, key, isString) {
return array.map(function (_, i) { return i; }).sort(
isString ?
function (a, b) { return array[a][key].localeCompare(array[b][key]); } :
function (a, b) { return array[a][key] - array[b][key]; }
).map(function (i) { return array[i]; });
}
var myArray = [
{ name: 'B', y: 20 },
{ name: 'C', y: 5 },
{ name: 'A', y: 10 }
];
document.write('<pre>sort by name: ' + JSON.stringify(sort(myArray, 'name', true), 0, 4) + '</pre>');
document.write('<pre>sort by y: ' + JSON.stringify(sort(myArray, 'y'), 0, 4) + '</pre>');
document.write('<pre>original array: ' + JSON.stringify(myArray, 0, 4) + '</pre>');
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- jQuery最近父级的数据属性选择器
- 用于'魔术串'属性