[英]how to replace array of object with an object in javascript without repeating
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 }
case1: i expect the result to be案例1:我希望结果是
[{ name: "ben", age: 10 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 }]
where "ben" is existing so it replaces age to 10 “ben”存在的地方,所以它将年龄替换为 10
case2: i expect the result to be案例2:我希望结果是
[{ name: "ben", age: 25 }, { name: "jeffrey", age: 10 },{ name: "daniel", age: 20 },{ name: "jack", age: 30 }]
where "jack" is not there in the array so it adds to the array其中“jack”不在数组中,因此它添加到数组中
how to write a function which does this functionality如何编写执行此功能的函数
Can be done with a for
loop as well.也可以用for
循环来完成。
function untitled(original, newObj) { for (let index = 0; index < original.length; index++) { if (original.name && newObj.name === a[index].name) { original[index] = {...newObj}; console.log(original); return; } } original.push(newObj); console.log(original); } 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 } untitled(a, case1); untitled(a, case2);
Yours is a good case for Array.prototype.findIndex
( MDN ), which is like Array.prototype.find
but returns the found index instead of the item.你是Array.prototype.findIndex
( MDN ) 的一个很好的例子,它类似于Array.prototype.find
但返回找到的索引而不是项目。
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 } const arrayUpsert = function (array, object) { const objectIndex = array.findIndex(item => item.name == object.name) if (objectIndex == -1) { array.push(object) } else { array[objectIndex] = { ...array[objectIndex], ...object } } return array } console.log(arrayUpsert(a, case1)) console.log(arrayUpsert(a, case2)) /* [ { name: 'ben', age: 10 }, { name: 'jeffrey', age: 10 }, { name: 'daniel', age: 20 } ] [ { name: 'ben', age: 10 }, { name: 'jeffrey', age: 10 }, { name: 'daniel', age: 20 }, { name: 'jack', age: 30 } ] */
I'm using ramda library in my solution:-我在我的解决方案中使用 ramda 库:-
Check whether the key exist in any of the object in array by检查键是否存在于数组中的任何对象中idx = R.findIndex(R.propEq('name', 'ben'), a)
. idx = R.findIndex(R.propEq('name', 'ben'), a)
. If idx<0
then we can directly push the object else go to the next step.如果idx<0
那么我们可以直接推送对象,否则进入下一步。
We have the index(idx), we just have to do a[idx].age="--"
.我们有索引(idx),我们只需要做a[idx].age="--"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.