【问题标题】:Removing objects from [key, value] object从 [key, value] 对象中删除对象
【发布时间】:2021-06-12 12:30:31
【问题描述】:

我是初学者,正在学习,请不要关闭我的问题。

我需要过滤带有toRemove:true属性的元素

{
  1: {itemId: 10, offset: 5, verticalPosition: 1, horizontalPosition: 35, toRemove: true},
  2: {itemId: 10, offset: 10, verticalPosition: 3, horizontalPosition: 65, toRemove: true},
  3: {itemId: 6, offset: 30, verticalPosition: 2, horizontalPosition: 109},
  4: {itemId: 8, offset: 40, verticalPosition: 5, horizontalPosition: 40},
  5: {itemId: 7, offset: 50, verticalPosition: 9, horizontalPosition: 50, toRemove: true},
  6: {itemId: 7, offset: 35, verticalPosition: 8, horizontalPosition: 77},
  7: {itemId: 7, offset: 45, verticalPosition: 7, horizontalPosition: 66}
}

我期望的是键/obj,如下面的代码。

{
  3: {itemId: 6, offset: 30, verticalPosition: 2, horizontalPosition: 109},
  4: {itemId: 8, offset: 40, verticalPosition: 5, horizontalPosition: 40},
  6: {itemId: 7, offset: 35, verticalPosition: 8, horizontalPosition: 77},
  7: {itemId: 7, offset: 45, verticalPosition: 7, horizontalPosition: 66}
}

如何过滤?

【问题讨论】:

标签: javascript object ecmascript-6 filter


【解决方案1】:

您可以使用Object.keys() 来遍历对象并删除您不想要的元素。除了删除之外,您还可以将它们添加到新变量中。

var data = {
  1: {itemId: 10, offset: 5, verticalPosition: 1, horizontalPosition: 35, toRemove: true},
  2: {itemId: 10, offset: 10, verticalPosition: 3, horizontalPosition: 65, toRemove: true},
  3: {itemId: 6, offset: 30, verticalPosition: 2, horizontalPosition: 109},
  4: {itemId: 8, offset: 40, verticalPosition: 5, horizontalPosition: 40},
  5: {itemId: 7, offset: 50, verticalPosition: 9, horizontalPosition: 50, toRemove: true},
  6: {itemId: 7, offset: 35, verticalPosition: 8, horizontalPosition: 77},
  7: {itemId: 7, offset: 45, verticalPosition: 7, horizontalPosition: 66}
}

Object.keys(data).forEach((key)=> {
  if (data[key].toRemove) delete data[key]
})

console.log(data)

【讨论】:

    【解决方案2】:

    如果你想使用.filter(),你可以在Object.values()上使用。然后assign它到一个新的Object,

    let obj = {
      1: {itemId: 10, offset: 5, verticalPosition: 1, horizontalPosition: 35, toRemove: true},
      2: {itemId: 10, offset: 10, verticalPosition: 3, horizontalPosition: 65, toRemove: true},
      3: {itemId: 6, offset: 30, verticalPosition: 2, horizontalPosition: 109},
      4: {itemId: 8, offset: 40, verticalPosition: 5, horizontalPosition: 40},
      5: {itemId: 7, offset: 50, verticalPosition: 9, horizontalPosition: 50, toRemove: true},
      6: {itemId: 7, offset: 35, verticalPosition: 8, horizontalPosition: 77},
      7: {itemId: 7, offset: 45, verticalPosition: 7, horizontalPosition: 66}
    };
    
    let res = Object.assign({}, Object.values(obj).filter(e => !e.toRemove));
    console.log(res);

    【讨论】:

    • 朋友您好,非常感谢。但请帮我多一点... 2 点: - 我不需要使用 .filter() - 我需要保留真实 ID,您的示例是设置 0 并在之后自动递增
    • @felipemuner 在这种情况下,@Rifat Bin Rezaanswer 更好。
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2012-08-31
    • 2021-08-03
    • 2018-07-30
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多