javascript - 对象数组的对象属性中的JS过滤数组

标签 javascript filter

我有这样的js对象

var continents = [
0: {
       short: 'na',
       countries: [
           {
               name: 'canada'
           },
           {
               name: 'usa'
           },
           //...
       ]

   },
   1: {
       short: 'sa',
       countries: [
           {
               name: 'chile'
           },
           {
               name: 'colombia'
           }
       ]

     },
//...
]

我想用一些字符串(例如'col')过滤这个对象以匹配国家名称(contents.countries.name) 过滤函数示例

filter(item => {
    return item.name.toLowerCase().indexOf('col'.toLowerCase()) >= 0;
});

期望结果:

  1: {
       short: 'sa',
       countries: [
           {
               name: 'colombia'
           }
       ]
     }

最佳答案

您不仅需要过滤各大洲,还需要过滤其中的国家/地区。

这是一个由两部分组成的过滤器,如下所示。

var continents = [{
  short: 'na',
  countries: [
    { name: 'canada' },
    { name: 'usa' }
  ]
}, {
  short: 'sa',
  countries: [
    { name: 'chile' },
    { name: 'colombia' }
  ]
}];

function filterByKeyValue(arr, keys, val) {
  return arr.filter(item => {
    return item[keys[0]].some(subitem => subitem[keys[1]].indexOf(val) > -1);
  }).map(item => {
    item[keys[0]] = item[keys[0]].filter(subitem => subitem[keys[1]].indexOf(val) > -1);
    return item;
  });
}

var filtered = filterByKeyValue(continents, [ 'countries', 'name' ], 'col');

console.log(filtered);
.as-console-wrapper { top: 0; max-height: 100% !important; }
<!--

Original filter that method is based on.

var filtered = continents.filter(continent => {
  return continent.countries.some(country => country.name.indexOf('col') > -1);
}).map(continent => {
  continent.countries = continent.countries.filter(country => country.name.indexOf('col') > -1);
  return continent;
});

-->

关于javascript - 对象数组的对象属性中的JS过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871851/

相关文章:

javascript - 无法在 react 中解构变量

javascript - 如何获取用户输入的文本并将其渲染到页面上的元素?

javascript - JavaScript 会自动跳过空函数吗?

php - LDAP 过滤器中的否定表达式在 PHP 中返回错误过滤器

javascript - 数据表 - 如何将搜索输入移出表

html - 如何在 Firefox 中将 FILTER/MASK 应用于图像

javascript - 在给定时间后停止 HTML5 Javascript 动画

javascript - 如何将 javascript 与 svg 结合使用?

php - 如何获取特定列中值为 null 的记录?

r - 使用数据框列的名称作为过滤数据框中该列的函数的参数值