Javascript 按属性值计算
我有一个这样的数组Javascript 按属性值计算,javascript,arrays,object,properties,Javascript,Arrays,Object,Properties,我有一个这样的数组 var myArray = [ {name: 'A', y: 10}, {name: 'B', y: 20}, {name: 'C', y: 5} ]; 是否可以对数组进行排序并保留原始索引 例如: 按y属性显示数组: var sortBy = function(prop){ return function(el1, el2){ return el1[prop]>el2[prop]; }; }; "C",, “A”, “B”
var myArray = [
{name: 'A', y: 10},
{name: 'B', y: 20},
{name: 'C', y: 5}
];
是否可以对数组进行排序并保留原始索引
例如:
按y属性显示数组:
var sortBy = function(prop){
return function(el1, el2){
return el1[prop]>el2[prop];
};
};
"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进行排序。返回包含对原始对象的引用的新数组
函数排序(数组、键、isString){
return array.map(函数(_,i){return i;}).sort(
isString?
函数(a,b){返回数组[a][key].localeCompare(数组[b][key]);}:
函数(a,b){返回数组[a][key]-数组[b][key];}
).map(函数(i){返回数组[i];});
}
var myArray=[
{name:'B',y:20},
{name:'C',y:5},
{name:'A',y:10}
];
write('sort by name:'+JSON.stringify(sort(myArray,'name',true),0,4)+'';
write('sort by y:'+JSON.stringify(sort(myArray,'y'),0,4)+'';
write('originalarray:'+JSON.stringify(myArray,0,4)+'')
您可以将索引作为信息的一部分,例如{name:'A',y:10,index:0}
,然后根据需要进行排序和显示。您无法排序,但仍保持索引不变。。。。或者在排序之前简单克隆数组:original=myArray.slice()
有关internet explorer不支持较新JS的常见警告,如Object.assign
array.prototype.sort()排序到位。所以你必须克隆原始数组以保留索引。是的,你是对的。或者,您可以在调用排序之前使用slice
制作副本。我的意思是var sortedByY=myArray.slice().sort(sortBy('y'))代码>