Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按属性值计算_Javascript_Arrays_Object_Properties - Fatal编程技术网

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'))