按物业价值计算

时间:2016-01-04 11:35:12

标签: javascript arrays object properties

我有一个像这样的数组

JSONObject json = data[0];

它可以对数组进行排序并保留原始索引吗?

示例:

按y属性显示数组:

' C&#39 ;, ' A&#39 ;, ' B'

按索引显示数组:

' A&#39 ;, ' B&#39 ;, ' C'

我希望你能帮助我。谢谢你的阅读。

3 个答案:

答案 0 :(得分:1)

您可以映射数组以保留数组对象中的索引:

{{ Add }}

然后对其进行排序:

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;
});

答案 1 :(得分:1)

您可以编写一个按属性排序的函数:

var sortBy = function(prop){
  return function(el1, el2){
    return el1[prop]>el2[prop];
  };
};

然后您可以使用y的数组myArray.sort(sortBy('y'))name myArray.sort(sortBy('name'))进行排序。您可以通过索引访问原始数组。或者你可以像madox2那样添加一个名为index的新属性。

答案 2 :(得分:1)

在负责排序类型的函数中使用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>');
&#13;
&#13;
&#13;