简体   繁体   English

如何过滤带有数组的对象?

[英]How to filter object with array inside?

I'm trying to filter everything inside 'items' with 'name': "", without losing structure and values of fieldLabel and placeholder.我正在尝试使用“名称”:“”过滤“项目”中的所有内容,而不会丢失 fieldLabel 和占位符的结构和值。 Below is my current object:以下是我当前的对象:

result: {
    "fieldLabel": "foo",
    "placeholder": "foo",
    "items": [
        {
            "name": "foobar"
        },
        
            "name": ""
        },
        {
            "name": ""
        }
    ]
}

I want the object to look like this after filtering:我希望对象在过滤后看起来像这样:

result: {
   "fieldLabel": "foo",
   "placeholder": "foo",
   ​"items": [
       ​{
           ​"name": "foobar"
       ​},       ​       ​       ​
   ​]
}

You can filter the nested items array that have truthy name properties.您可以过滤具有真实name属性的嵌套items数组。

 const result= { "fieldLabel": "foo", "placeholder": "foo", "items": [ { "name": "foobar" }, { "name": "" }, { "name": "" } ] }; result.items = result.items.filter(({ name }) => name); console.log(result);

If you need to do this using an immutable pattern then shallow copy the object and nested properties that you are updating.如果您需要使用不可变模式执行此操作,则浅复制您正在更新的对象和嵌套属性。

 const result= { "fieldLabel": "foo", "placeholder": "foo", "items": [ { "name": "foobar" }, { "name": "" }, { "name": "" } ] }; const newresult = { ...result, items: result.items.filter(({ name }) => name) }; console.log(newresult); console.log(result === newresult); // false since new object

  1. Have a reference to the original object first.首先引用原始对象。
const results = {
    "fieldLabel": "foo",
    "placeholder": "foo",
    "items": [
        {
            "name": "foobar"
        },
        {
            "name": ""
        },
        {
            "name": ""
        }
    ]
}
  1. Create a new object from the reference.从引用创建一个新对象。 Use spread syntax for copying object.使用扩展语法复制对象。 Then filter method for filtering然后进行过滤的过滤方法
const newObject = {
  ...results,
  items: results.items.filter(item => item.name)
}

Something like this?像这样的东西?

Filter YOUROBJ.items to keep all entries where property name has a value that is not null/undefined/false过滤YOUROBJ.items以保留属性名称的值不为 null/undefined/false 的所有条目

res.items = res.items.filter(e => e.name);

 const obj = { "fieldLabel": "foo", "placeholder": "foo", "items": [ { "name": "foobar" }, { "name": "" }, { "name": "" } ] } const res = Object.assign({}, obj); // copy object to not mutate the original one res.items = res.items.filter(e => e.name); // filter array "items" to just keep items with property name console.log(res);

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

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