我有一个对象数组:
[
{
incoming_number: 1,
incoming_number_fraction: 0,
article:'a1'
},
{
incoming_number: 2,
incoming_number_fraction: 0,
article:'a2'
},
{
incoming_number: 2,
incoming_number_fraction: 2,
article:'a3'
},
{
incoming_number: 3,
incoming_number_fraction: 0,
article:'a4'
},
{
incoming_number: 4,
incoming_number_fraction: 0,
article:'a5'
},
{
incoming_number: 4,
incoming_number_fraction: 2,
article:'a6'
},
{
incoming_number: 4,
incoming_number_fraction: 4,
article:'a7'
},
]
任务是通过以下逻辑从数组中删除元素:如果存在具有相似“incoming_number”的元素,我们必须保存最大“incoming_number_fraction”的元素并删除所有其他人。
结果应该是:
[
{
incoming_number: 1,
incoming_number_fraction: 0
},
{
incoming_number: 2,
incoming_number_fraction: 2
},
{
incoming_number: 3,
incoming_number_fraction: 0
},
{
incoming_number: 4,
incoming_number_fraction: 4
},
]
数组中有很多元素(超过 10000 个),我想以最少的步骤完成此操作。
编辑
我尝试这样的事情:
for (let i = 0; i < arr.length ; i++) {
if (arr[i]['incoming_number'] === arr[i + 1]['incoming_number']) {
let j = i + 1
while (arr[j]['incoming_number'] === arr[j + 1]['incoming_number']) {
j++
}
}
arr.splice(i, j-1)
}
但它不起作用...
编辑2
添加有关数组中对象的更多信息。
最佳答案
使用 findIndex 或 grep 在大数组中查找选定的数字会降低性能。
因此,使用数字作为属性将是查找对象和更改 incoming_number_fraction
的最快方法。
使用 grep、findindex 可能会产生更小的代码,但不会产生更好的性能,在您的情况下,您需要更高的性能而不是更小的代码。
看看我的例子并告诉我。
var arr=[
{
incoming_number: 1,
incoming_number_fraction: 0,
article:'a1'
},
{
incoming_number: 2,
incoming_number_fraction: 0,
article:'a2'
},
{
incoming_number: 2,
incoming_number_fraction: 2,
article:'a3'
},
{
incoming_number: 3,
incoming_number_fraction: 0,
article:'a4'
},
{
incoming_number: 4,
incoming_number_fraction: 0,
article:'a5'
},
{
incoming_number: 4,
incoming_number_fraction: 2,
article:'a6'
},
{
incoming_number: 4,
incoming_number_fraction: 4,
article:'a7'
},
]
var finalResult = [];
var result = {};
var includedNumbers = []
arr.forEach(function(item){
var number = item.incoming_number;
if (!result[item.incoming_number]){ // with Index, is the fastest way
result[number] = item;
includedNumbers.push(number);
}else {
if (result[number].incoming_number_fraction< item.incoming_number_fraction ){
result[number] = item;
}
}
});
// now lets clean the result
includedNumbers.forEach(function(item){
finalResult.push(result[item])
});
console.log(finalResult)
关于javascript - 通过对象属性从对象数组中删除小于另一个的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355972/