簡體   English   中英

javascript通過另一個對象數組內的屬性檢查添加或替換對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM