简体   繁体   English

更新对象数组中的单个项目

[英]Update a single item in array of objects

I have some data - I'd like to update a boolean in a single object.我有一些数据 - 我想在单个 object 中更新 boolean。

The below works - It just seems like a really long way to do something so simple?下面的作品 - 做如此简单的事情似乎真的很长的路要走?

Also - If I were to change letter: "c" , it would be c at the front of the array, which would be incorrect.另外 - 如果我要更改letter: "c" ,它将是数组前面的 c ,这是不正确的。 So is there a good way to maintain the order?那么有没有什么好办法维持秩序呢?

Thanks!!谢谢!!

// initial data
let data = [
  { letter: "a", number: 1, bool: true },
  { letter: "b", number: 2, bool: true },
  { letter: "c", number: 3, bool: true },
  { letter: "d", number: 4, bool: true },
  { letter: "e", number: 5, bool: true },
  { letter: "f", number: 6, bool: true },
  { letter: "g", number: 7, bool: true },
  { letter: "h", number: 8, bool: true },
  { letter: "i", number: 9, bool: true }
];

// get the row I need to change
const rowToChange = data.find(item => {
  return item.letter === "a";
});

// remove that row from data
data = data.filter(document => {
  return document !== rowToChange;
});

// updates the boolean value
rowToChange.bool = !rowToChange.bool;

// puts it back into the array
data = [rowToChange, ...data];

The method you're using is to (usually) ensure that you don't mutate the original data.您使用的方法是(通常)确保您不会改变原始数据。 If mutating the data is not an issue (and it doesn't look like it is) you can just drop some of the code.如果改变数据不是问题(而且看起来不是问题),您可以删除一些代码。 I've used findIndex here instead of find :我在这里使用findIndex而不是find

 let data = [ { letter: "a", number: 1, bool: true }, { letter: "b", number: 2, bool: true }, { letter: "c", number: 3, bool: true }, { letter: "d", number: 4, bool: true }, { letter: "e", number: 5, bool: true }, { letter: "f", number: 6, bool: true }, { letter: "g", number: 7, bool: true }, { letter: "h", number: 8, bool: true }, { letter: "i", number: 9, bool: true } ]; const rowToChange = data.findIndex(item => { return item.letter === "c"; }); data[rowToChange].bool =.data[rowToChange];bool. console;log(data);

you can do this, if you do not have some restrictions to the task如果您对任务没有一些限制,您可以这样做

data.forEach(item => {
    if (item.letter == "a") {
       item.bool = !item.bool;
    }
});

With ES6, you can easily update a property of one object in your array using the map function:使用 ES6,您可以使用map function 轻松更新阵列中一个 object 的属性:

let data = [
  { letter: "a", number: 1, bool: true },
  { letter: "b", number: 2, bool: true },
  { letter: "c", number: 3, bool: true },
  { letter: "d", number: 4, bool: true },
  { letter: "e", number: 5, bool: true },
  { letter: "f", number: 6, bool: true },
  { letter: "g", number: 7, bool: true },
  { letter: "h", number: 8, bool: true },
  { letter: "i", number: 9, bool: true }
];

console.log(data.map(d =>
  d.letter === 'c'
    ? { ...d, bool: false }
    : d
));

This will produce the following output:这将产生以下 output:

[
  { letter: "a", number: 1, bool: true },
  { letter: "b", number: 2, bool: true },
  { letter: "c", number: 3, bool: false },
  { letter: "d", number: 4, bool: true },
  { letter: "e", number: 5, bool: true },
  { letter: "f", number: 6, bool: true },
  { letter: "g", number: 7, bool: true },
  { letter: "h", number: 8, bool: true },
  { letter: "i", number: 9, bool: true }
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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