Object.assign()用于替换JSON对象

时间:2019-10-18 09:21:26

标签: javascript

我有XXXenv像这样:

JSON

我想用另一个对象替换{ "ArrayInfo": [ { "name": "A", "Id": "1" }, { "name": "B", "Id": "2" }, { "name": "C", "Id": "3" }, { "name": "D", "Id": "4" } ] } 的对象。例如,我有这个对象:

JSON

,它将被{"name":"E","Id":"5"} 的这个对象替换:

JSON

JSON应该如下所示:

{"name":"B","Id":"2"}

我所做的是使用{ "ArrayInfo": [ { "name": "A", "Id": "1" }, { "name": "E", "Id": "5" }, { "name": "C", "Id": "3" }, { "name": "D", "Id": "4" } ] } ,但是新对象将被添加到数组中而不是被替换。 (所有数据都是动态的,但为了使用户更容易理解,我使用静态数据)

Object.assign

const itemToReplace = { "name": "E", "Id": "5" }; const prevItem = ArrayInfo[2] ArrayInfo = ArrayInfo.map((el, idx) => { return Object.assign({}, el, { prevItem: itemToReplace }); }); let NewArryInfo = ArrayInfo console.log(NewArryInfo) 的结果:

console.log(NewArryInfo)

5 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.splice替换Array中的项目。

const replaceItem = {"name":"E","Id":"5"}
const ArrayInfo = [
    {
        "name": "A",
        "Id": "1"
    },
    {
        "name": "B",
        "Id": "2"
    },
    {
        "name": "C",
        "Id": "3"
    },
    {
        "name": "D",
        "Id": "4"
    }
];
ArrayInfo.splice(1, 1, replaceItem); // remove second item and replace
console.log(ArrayInfo);

答案 1 :(得分:1)

const object = {
  "ArrayInfo": [{
      "name": "A",
      "Id": "1"
    },
    {
      "name": "B",
      "Id": "2"
    },
    {
      "name": "C",
      "Id": "3"
    },
    {
      "name": "D",
      "Id": "4"
    }
  ]
};

const objectToReplace = {
  "name": "B",
  "Id": "2"
};

const updatedObject = Object.assign({}, object, {
  ArrayInfo: object.ArrayInfo.map((info) => {
    if (info.Id === objectToReplace.Id && info.name === objectToReplace.name) {
      return {
        "name": "E",
        "Id": "5"
      };
    }

    return info;

  })
});

console.log(updatedObject);

答案 2 :(得分:0)

const myArr = [
    {
        "name": "A",
        "Id": "1"
    },
    {
        "name": "B",
        "Id": "2"
    },
    {
        "name": "C",
        "Id": "3"
    },
    {
        "name": "D",
        "Id": "4"
    }
];


const replaceObj = (arr, objReplaced, objToReplaceWith) => {
  const replacedObjIndex = arr.findIndex(item => JSON.stringify(item) === JSON.stringify(objReplaced));
 arr[replacedObjIndex] = objToReplaceWith;
 console.log(arr)
 return arr;
}

replaceObj(myArr, {"name":"B","Id":"2"}, {"name":"E","Id":"5"});

通过这种方式,您可以从数组中的任何位置替换任何对象。 您不必担心要替换的项目在数组中的位置,也不必担心其键或值。

答案 3 :(得分:0)

尝试一下!

let ArrayInfo = [{"name": "A","Id": "1"},{"name": "B","Id": "2"},{"name": "C","Id": "3"},{"name": "D","Id": "4"}];
const onReplace = {"name":"E","Id":"5"};
const toReplace = {"name": "B","Id": "2"};

function replaceArray(array, onReplace, toReplace) {
  const removeIndex = array.map(item => { return item.name; }).indexOf(toReplace.name);
  array.splice(removeIndex, removeIndex, onReplace);
  return array
}

console.log(replaceArray(ArrayInfo, onReplace, toReplace));

答案 4 :(得分:0)

在数组上映射时,可以检查每个项目是否都是要替换的项目,如果是,则返回新项目。

ArrayInfo = ArrayInfo.map((el, idx) => {
  if (el.id === prevItem.id && el.name === prevItem.name) {
    return itemToReplace;
  }
  return el;
});