javascript - 更新对象数组中的属性

标签 javascript

有没有办法根据其他属性作为元素出现在其他数组中的次数来更新对象数组中的属性

我有 2 个数组,array1array2 :

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/

    相关文章:

    javascript - 正则表达式(正则四选三逻辑)

    javascript - 通过 prop 操纵状态是否正确?

    javascript - 花式盒子2 : Amending call for multiple galleries

    javascript - 在这种情况下,v-if 的另一种解决方案是什么?

    javascript - Bootstrap - 随着屏幕缩小而缩小图像大小

    javascript -/r/thebutton 定时器如何工作?

    javascript - 如何从字符串中删除空格和一组字符

    javascript - 通过 jquery 添加和操作 div,而不使用任何 html 之类的代码

    javascript - 谷歌地图 API V2 : How to add markers which behave like the default google maps markers

    javascript - console.log 如何处理没有返回值的函数