【问题标题】:Remove object content from Array using value [duplicate]使用值从数组中删除对象内容[重复]
【发布时间】:2020-12-31 21:13:40
【问题描述】:

我已经创建了如下所示的 obj

var data_content = [{
    project_name: 'First',
    info: {
      Value1: 'one',
      Value2: 'two'
    }
  },
  {
    project_name: 'Second',
    info: {
      Value1: 'one'
    }
  }
];

我想使用 key project_name 的值删除键/值对

如果我从一个名为 first 的值中删除,结果应该是

data_content = [{
  project_name: 'Second',
  info: {
    Value1: 'one'
  }
}];

请帮助我如何实现这一目标

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    使用过滤功能

    const filtered_content = data_content.filter(d => d.project_name !== 'First');
    

    【讨论】:

    • 也许补充说这必须分配给一个新的变量?
    【解决方案2】:

    我假设第二个代码 sn-p 中的 dashboard_info 与第一个 sn-p 中的 info 实际上相同

    如果是这样,您只需在对象的给定属性中使用 delete 关键字即可将其删除

    所以var it= obj["key"] 然后delete it,或者简单地说,一般是delete obj["key"]

    让您的案例有趣的是,它不仅仅是删除一个已知属性,实际上是从一个数组中删除整个对象(只是认为提供delete intro如果你还有为什么要修改一个对象的属性)

    要从数组中删除元素,请使用Array.splice(indexToStartAt, numberOfElementsToCutOut)

    所以在这种情况下,你会想要data_content.splice(0,1),因为你从第 0 个索引开始删除,并且你只想删除一个元素

    问题是,虽然我猜你想使这个动态化,这样你想从数组中删除属性“project_name”等于“First”的任何元素,你可以用一个遍历数组递归函数

    
    var cur=0
    
    function go(str) {
        var found = data_content.find(x=>x.project_name==str)
        if (found) {
            data_content.splice(data_content.indexOf(found),1)
            if (++cur < data_content.length) 
                go(str)
        }
    }
    go("First")
    

    【讨论】:

      【解决方案3】:

      你可以在这里看到类似的问题Remove array element based on object property

      data_content = data_content.filter(function( obj ) {
          return obj.project_name !== 'First';
      });
      

      【讨论】:

        【解决方案4】:

        如果只有一项,您可以使用findIndex()splice()

        var data_content=[{project_name:"First",info:{Value1:"one",Value2:"two"}},{project_name:"Second",info:{Value1:"one"}}];
        
        const idx = data_content.findIndex(e => e.project_name==='First');
        idx > -1 && data_content.splice(idx,1)
        
        console.log(data_content)

        【讨论】:

          猜你喜欢
          • 2016-11-07
          • 2019-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-08
          • 1970-01-01
          • 2021-08-26
          • 2020-11-29
          相关资源
          最近更新 更多