有没有办法根据其他属性作为元素出现在其他数组中的次数来更新对象数组中的属性
我有 2 个数组,array1
和 array2
:
var array1 = ["JOHN", "JACK", "JACK"];
var array2 = [
{count: 9, value: "JACK"},
{count: 9, value: "JOHN"},
{count: 2, value: "TEST"}
];
预期输出:
[
{count: 7, value: "JACK"}, // count = 9 - 2
{count: 8, value: "JOHN"}, // count = 9 - 1
{count: 2, value: "TEST"}
]
在
array1
,“JACK”出现两次,所以我需要将计数减少 2,类似地,“JOHN”出现一次,因此减少 1,“TEST”没有出现,所以没有改变。我尝试了以下
array1.map(item => {
return array2.find( p => p["value"] === item);
});
有了这个,我得到以下输出,
[
{count: 9, value: "JOHN"},
{count: 9, value: "JACK"},
{count: 9, value: "JACK"}
]
我不确定是否可以使用单个 lambda 表达式来实现。
提前致谢!
最佳答案
您可以使用数组 .map()
获得结果和 .filter()
方法,假设您不允许更改原始数组:
var array1 = ["JOHN", "JACK", "JACK"];
var array2 = [{count: 9, value: "JACK"}, {count: 9, value: "JOHN"}, {count: 2, value: "TEST"}]
var result = array2.map(({value, count}) => ({value, count: count - array1.filter(a=>a===value).length}))
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
.filter()
检查多少次value
存在于 array1
array2
中减去该结果数数。 关于javascript - 更新对象数组中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61078385/