This question already has answers here:
Sorting an array of objects by property values
(30个答案)
3年前关闭。
这个问题涉及我的算法以及为什么它不起作用。更具体地说,我想知道如何改进它来做我想做的事情。这就是为什么它与建议的重复问题不同的原因。
我正在尝试创建一个函数,该函数根据它们共同共享的“indexFound”的属性值(int)对对象数组进行排序。您可能会怀疑,我正在尝试将具有较低indexFound的元素放在数组的开头。
就目前而言,当我向它提供对象数组时,此代码没有任何区别。元素仍未按应有的顺序排列。我是否以正确的方式处理此问题?我是否缺少明显的东西?
编辑:------------------------------------------------ -------------------
示例输入:OrganizeTokens([{{value:“if”,indexFound:7},{value:“a”,indexFound:0}])
预期输出:[{值:“a”,indexFound:0},{值:“if”,indexFound:7}]
实际输出:[{值:“if”,indexFound:7},{值:“a”,indexFound:0}]
上述比较功能的简单/简洁版本:
使用ES6:
您可以定义自己的
(30个答案)
3年前关闭。
这个问题涉及我的算法以及为什么它不起作用。更具体地说,我想知道如何改进它来做我想做的事情。这就是为什么它与建议的重复问题不同的原因。
我正在尝试创建一个函数,该函数根据它们共同共享的“indexFound”的属性值(int)对对象数组进行排序。您可能会怀疑,我正在尝试将具有较低indexFound的元素放在数组的开头。
function organizeTokens(list) {
for (i = 0; i < list.length - 1; i++) {
if (list[i].indexFound < list[i + 1].indexFound) {
// do nothing
} else if (list[i].indexFound > list[i + 1].indexFound) {
var tempVal = list[i];
list[i] = list[i + 1];
list[i + 1] = tempVal;
} else {
// should not happen unless we are comparing the same token
}
}
};
就目前而言,当我向它提供对象数组时,此代码没有任何区别。元素仍未按应有的顺序排列。我是否以正确的方式处理此问题?我是否缺少明显的东西?
编辑:------------------------------------------------ -------------------
示例输入:OrganizeTokens([{{value:“if”,indexFound:7},{value:“a”,indexFound:0}])
预期输出:[{值:“a”,indexFound:0},{值:“if”,indexFound:7}]
实际输出:[{值:“if”,indexFound:7},{值:“a”,indexFound:0}]
最佳答案
您可以使用Array.prototype.sort()
并定义一个比较函数:
function compareIndexFound(a, b) {
if (a.indexFound < b.indexFound) { return -1; }
if (a.indexFound > b.indexFound) { return 1; }
return 0;
}
list.sort(compareIndexFound);
上述比较功能的简单/简洁版本:
function compareIndexFound(a, b) {
return a.indexFound - b.indexFound;
}
使用ES6:
list.sort((a, b) => a.indexFound - b.indexFound);
您可以定义自己的
sortBy
函数:function sortBy(arr, prop) {
return arr.sort((a, b) => a[prop] - b[prop]);
}
sortBy(list, 'indexFound');
10-07 21:13