简体   繁体   中英

javascript add or replace an object by property check inside another array of objects

I want to add or replace an object inside another array.

var arr = [
  {uid: 1, name: "bla", description: "cucu"},
  {uid: 2, name: "smth else", description: "cucarecu"},
]

here here is an new object:

var mynewObject = {uid: 1, name: "newBlabla", description: "newDesc"};

i am already doing it like:

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;
} 

but this is very ugly. is there any way to do it in one line or two?

the original array should remain an array, and the new object should be checked only by property uid .

To achieve the same functionality, yet make it a more condense one-liner, run Array#findIndex and assign its result to the unused parameter idx of the function (effectively overwriting its value, which is undefined by default, or the value, with which the function was called) , then use a simple ternary operator to modify the existing object or add to the array and finally return the modified array.

 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)); 

Or a bit more concise if you don't need to return the array:

 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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM