如何使用JS ES6更新对象的一部分

时间:2017-10-27 07:50:45

标签: javascript arrays ecmascript-6

我有一个对象

{
    "_id" : "6QMR4A23KEXCFJDof",
    "userId" : "3Xb6teoWNnEMWKzgq"
    "title" : "My title",
    "lines" : [ 
        {
            "id" : "5eafc0186f0cc7c5c4bb1989",
            "text" : "First line...",
            "align" : "left"
        },
        {
            "id" : "eb1b5ef1212d2c0099716bd7",
            "text" : "Second line...",
            "align" : "left"
        }
    ]
}

如何更新"文字" "线" id =" eb1b5ef1212d2c0099716bd7"使用javascript ES6? 谢谢!

3 个答案:

答案 0 :(得分:2)

如果您的对象是obj

obj.lines.forEach(l => {
    if (l.id === 'eb1b5ef1212d2c0099716bd7') {
        l.text = 'your new text';
    }
});

您可能希望在更通用的函数中使用此代码/重构它以适合您的目的。

答案 1 :(得分:1)

您可以通过以下方式执行此操作

let obj = {
    "_id" : "6QMR4A23KEXCFJDof",
    "userId" : "3Xb6teoWNnEMWKzgq",
    "title" : "My title",
    "lines" : [ 
        {
            "id" : "5eafc0186f0cc7c5c4bb1989",
            "text" : "First line...",
            "align" : "left"
        },
        {
            "id" : "eb1b5ef1212d2c0099716bd7",
            "text" : "Second line...",
            "align" : "left"
        }
    ]
}

let idx = obj['lines'].findIndex((obj2) => obj2.id == "eb1b5ef1212d2c0099716bd7");

obj['lines'][idx].text = 'newVal';

console.log(obj);

答案 2 :(得分:1)

您只想使用Array.filter过滤您的数组,并找到具有提供的ID的对象。然后,当您拥有该对象时,您只需修改其属性即可。以下是一个例子

let obj = {
  _id: "6QMR4A23KEXCFJDof",
  userId: "3Xb6teoWNnEMWKzgq",
  title: "My title",
  lines: [
    {
      id: "5eafc0186f0cc7c5c4bb1989",
      text: "First line...",
      align: "left"
    },
    {
      id: "eb1b5ef1212d2c0099716bd7",
      text: "Second line...",
      align: "left"
    }
  ]
};

const updateLine = (id, property, newValue) => {
  let lineToUpdate = obj.lines.filter(line => line["id"] === id)[0][property] = newValue
}

updateLine("eb1b5ef1212d2c0099716bd7", "text", "newValue");