从对象数组中仅选择特定属性

5

假设我创建了以下对象:

updates.push({
      id: this.ids[i],
      point: point,
      value: value
    });

之后我想在updates对象上使用JSON.stringify,但我只需要pointvalue,如下:

updates[{point: 1, value: 12}, {point: 2, value: 24}]

有什么最好的ES6解决方案吗?

我看了一些使用delete的示例,但这并不是我真正需要的,因为我不想删除id。


所以克隆它并删除它,或者只复制您需要的部分。 - epascarello
在 stringify 之前,你可以简单地克隆对象并忽略某些字段。 - ABOS
JSON.stringify(value[, replacer[, space]]),利用replacer。 - ABOS
1
请澄清一下:您是否只需要pointvalue这两个属性?还是说您需要除了ID以外的所有属性? - Tyler Roper
只有点和值,永远如此。 - user122222
显示剩余4条评论
3个回答

7
请尝试以下操作:
JSON.stringify(updates.map(({point,value})=>({point,value})));

let updates = [{id : 1, point : 1, value: 2},{id : 1, point : 1, value: 2}];
console.log(JSON.stringify(updates.map(({point,value})=>({point,value}))));


4
如果updates是一个数组。那么你可能想要像这样的东西:
const newArrayWithoutId = updates.map(({ point, value }) => {
  return {
    point,
    value,
  }
}

({id, ...rest}) => ({...rest}) 这样写更简洁。 - Scott Sauyet
我认为这取决于你想做什么...但我同意。我会认为我的版本更易读,更具体。如果应用程序发生变化并且“更新”项开始包含更多属性,则会获取所有这些属性,而可能OP只想要“点”和“值”数据点。 - Andrew Kim
@tylerroper在另一个回答帖子中提出了一个很好的观点。 - Andrew Kim
我不确定我同意可读性方面的观点,但是是的,正确答案更取决于实际情况。我在自己的回答评论中也提到了同样的观点。 - Scott Sauyet
1
@TylerRoper:没问题。我会把我的留在这里,因为所有与它相关的对话,但我也给了其他两个当前答案点赞。 - Scott Sauyet
显示剩余2条评论

3

仅有的 ({id, ...rest}) => ({...rest}) 对于回答来说太过简短了,那么这个如何呢?

const withoutId = ({id, ...rest}) => ({...rest})

const vals = [
  {id: 'a', point: 1, value: 'foo'},
  {id: 'b', point: 2, value: 'bar'},
  {id: 'c', point: 3, value: 'baz', meaning: 42}
]

const reduced = vals.map(withoutId)

console.log(reduced)


2
OP 的标题是关于“删除一个属性”的,所以我认为真正的解决方案应该提供“除了 id 之外的所有内容”。这是迄今为止唯一一个在没有硬编码任何属性名称的情况下实现了这一点的答案。+1 来自我,但不幸的是,这一切都是基于猜测的。OP 需要澄清。 - Tyler Roper
1
是的,尽管通过小例子很难确定实际情况是否涉及删除一些值或保留一些值,或者更糟糕的是介于两者之间。 - Scott Sauyet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接