如何在javascript中用对象替换对象数组而不重复

如何在javascript中用对象替换对象数组而不重复,javascript,reactjs,Javascript,Reactjs,案例1: 我希望结果是好的 let a = [{ name: "ben", age: 25 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }] let case1 = { name: "ben", age: 10 } let case2={ name: "jack", age: 30 } [{ name: "ben&

案例1: 我希望结果是好的

let a = [{ name: "ben", age: 25 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }]
let case1 = { name: "ben", age: 10 }
let case2={ name: "jack", age: 30 }
[{ name: "ben", age: 10 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }]
其中“ben”已经存在,因此它将年龄替换为10岁

案例2: 我希望结果是好的

let a = [{ name: "ben", age: 25 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }]
let case1 = { name: "ben", age: 10 }
let case2={ name: "jack", age: 30 }
[{ name: "ben", age: 10 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }]
其中“jack”不在数组中,因此它会添加到数组中


如何编写实现此功能的函数对于
Array.prototype.findIndex
()是一个很好的例子,它类似于
Array.prototype.find
,但返回找到的索引而不是项

a=[{姓名:“本”,年龄:25},{姓名:“杰弗里”,年龄:10},{姓名:“丹尼尔”,年龄:20}]
让案例1={姓名:“本”,年龄:10}
让案例2={姓名:“杰克”,年龄:30}
常量arrayUpsert=函数(数组,对象){
const objectIndex=array.findIndex(item=>item.name==object.name)
如果(objectIndex==-1){
array.push(对象)
}否则{
数组[objectIndex]={…数组[objectIndex],…对象}
}
返回数组
}
控制台日志(arrayUpsert(a,案例1))
控制台日志(arrayUpsert(a,案例2))
/* [
{姓名:'ben',年龄:10},
{姓名:'jeffrey',年龄:10},
{姓名:'daniel',年龄:20}
]
[
{姓名:'ben',年龄:10},
{姓名:'jeffrey',年龄:10},
{姓名:'daniel',年龄:20},
{姓名:“杰克”,年龄:30}

]*/
我正在解决方案中使用ramda库:-

  • 通过
    检查该键是否存在于数组中的任何对象中
    idx=R.findIndex(R.propEq('name','ben'),a)
    。If
    idx也可以通过
    for
    循环来完成

    函数未命名(原件,newObj){
    for(让index=0;index无标题(a,案例2)
    解决这个问题的每一种方法都会使用某种形式的迭代(重复)。@Kevin B-迭代是的,这是必要的,但这可以由JS自己通过使用
    find
    findIndex
    @Sascha来完成,其中。。。在数组上迭代。@Kevin B-是的,但是在数组上创建它的问题在哪里?@BenFranklin你应该澄清你的标题中“不重复”的意思