![](/img/trans.png)
[英]Find object by property in an array of JavaScript objects inside another array
[英]javascript add or replace an object by property check inside another array of objects
我想在另一個數組中添加或替換一個對象。
var arr = [
{uid: 1, name: "bla", description: "cucu"},
{uid: 2, name: "smth else", description: "cucarecu"},
]
這是一個新對象:
var mynewObject = {uid: 1, name: "newBlabla", description: "newDesc"};
我已經這樣做了:
function addOrReplace (arr, object) {
var index = arr.findIndex(x => object.uid === x.uid);
if (-1 === index) {
arr.push(object);
} else {
arr[index] = object;
}
return arr;
}
但這很丑。 有沒有辦法在一兩行中做到這一點?
原始數組應仍為數組,而新對象應僅由uid
屬性檢查。
為了實現相同的功能,但使其更緊湊,運行Array#findIndex並將其結果分配給該函數的未使用參數idx
(有效地覆蓋其值(默認情況下undefined
或使用該值然后調用該函數) ,然后使用簡單的三元運算符修改現有對象或將其添加到數組中,最后返回修改后的數組。
const arr1 = [ { uid: 1, name: "bla", description: "cucu" }, { uid: 2, name: "smth else", description: "cucarecu" }, ] const mynewObject1 = { uid: 1, name: "newBlabla", description: "newDesc" }; const arr2 = [ { uid: 2, name: "smth else", description: "cucarecu" }, ] const mynewObject2 = { uid: 1, name: "newBlabla", description: "newDesc" }; const arr3 = [] const mynewObject3 = { uid: 1, name: "newBlabla", description: "newDesc" }; function addOrReplace (arr, obj, idx) { return (idx = arr.findIndex(x => obj.uid === x.uid) > -1 ? arr[idx] = obj : arr.push(obj)), arr; } console.log(addOrReplace(arr1, mynewObject1)); console.log(addOrReplace(arr2, mynewObject2)); console.log(addOrReplace(arr3, mynewObject3));
或者,如果不需要返回數組,則更加簡潔:
const arr1 = [ { uid: 1, name: "bla", description: "cucu" }, { uid: 2, name: "smth else", description: "cucarecu" }, ] const mynewObject1 = { uid: 1, name: "newBlabla", description: "newDesc" }; const arr2 = [ { uid: 2, name: "smth else", description: "cucarecu" }, ] const mynewObject2 = { uid: 1, name: "newBlabla", description: "newDesc" }; const arr3 = [] const mynewObject3 = { uid: 1, name: "newBlabla", description: "newDesc" }; function addOrReplace (arr, obj, idx) { idx = arr.findIndex(x => obj.uid === x.uid) > -1 ? arr[idx] = obj : arr.push(obj); } addOrReplace(arr1, mynewObject1) console.log(arr1); addOrReplace(arr2, mynewObject2) console.log(arr2); addOrReplace(arr3, mynewObject3) console.log(arr3);
const addOrReplace = (arr, obj) => {
arr = arr.filter(el => el.uid !== obj.uid);
arr.push(obj)
return arr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.