gpt4 book ai didi

javascript - 仅将重复项从数组推送到新数组(以便它们可以加在一起)

转载 作者:行者123 更新时间:2023-11-29 23:17:27 24 4
gpt4 key购买 nike

我已经看到很多关于如何删除重复项的答案,但我需要相反的答案。我有一个重复的数组。我需要形成一个只有重复项的新数组。然而,重复项是未知的,需要首先发现,因此整个过程是自动化的。

    array = [{
"name": "cat",
"amount": 1
}, {
"name": "cat",
"amount": 3
}, {
"name": "cat",
"amount": 2
}, {
"name": "dog",
"amount": 5
}, {
"name": "dog",
"amount": 3
}, {
"name": "dog",
"amount": 2
}, {
"name": "dog",
"amount": 5
}, {
"name": "duck",
"amount": 1
}, {
"name": "duck",
"amount": 4
}]

然后这会变得更加复杂,因为每个重复项都需要被插入其自己的数组,而且一个更可取的方法是,如果数组中的项超过 2 个,那么才会这样做。

(这里的最终目标是计算重复项的总数,所以也许有更好的解决方案?)

最终结果应该是这样的:

array1 = [{
"name": "cat",
"amount": 1
}, {
"name": "cat",
"amount": 3
}, {
"name": "cat",
"amount": 2
}]

array2 = [{
"name": "dog",
"amount": 5
}, {
"name": "dog",
"amount": 3
}, {
"name": "dog",
"amount": 2
}, {
"name": "dog",
"amount": 5
}]

但实际的最终结果只是将重复的总和,如此(但如果可以生成以前的数组,我已经可以得到这个):

array = [{
"name": "cat",
"amount": 6
}, {
"name": "dog",
"amount": 15
}]

尝试在 Javascript 或 PHP 中获得此结果。

到目前为止,我最接近的是使用 PHP 将独特的项目放入一个新数组中:

function get_duplicates ($array) {
return array_unique( array_diff_assoc( $array, array_unique( $array ) ) );
}

但这只是给出了重复项。

最佳答案

试试这个:

var array = [{
"name": "cat",
"amount": 1
}, {
"name": "cat",
"amount": 3
}, {
"name": "cat",
"amount": 2
}, {
"name": "dog",
"amount": 5
}, {
"name": "dog",
"amount": 3
}, {
"name": "dog",
"amount": 2
}, {
"name": "dog",
"amount": 5
}, {
"name": "duck",
"amount": 1
}, {
"name": "duck",
"amount": 4
}];

var data = {};
for (var elem of array) {
data[elem.name] = data[elem.name] || []
if (data[elem.name]) {
data[elem.name].push(elem);
} else {
data[elem.name] = [elem];
}
}

var result = [];

for (var key in data) {
var amounts = 0;
for (var elem of data[key]) {
amounts += elem.amount;
}
result.push({
name: key,
amount: amounts
});
}


console.log(result);
// [{
// "name": "cat",
// "amount": 6
// }, {
// "name": "dog",
// "amount": 15
// }, {
// "name": "duck",
// "amount": 5
// }]

关于javascript - 仅将重复项从数组推送到新数组(以便它们可以加在一起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com