如何按javascript中的值过滤对象数组?

时间:2016-10-26 13:40:23

标签: javascript

因此,我将过滤后的id放在一个数组中,并将所有数据放在另一个对象数组中。我想显示值数组中提到的过滤的id值。

var allData = [
    {
      id:'10',
      name:'jhon'
    },
    {
      id:'11',
      name:'lewis'
    },
    {
      id:'12',
      name:'taylor'
    },
    {
      id:'13',
      name:'adam'
    },
    {
      id:'14',
      name:'bolive'
    }
];

var addedIds = ['10', '12', '14'];

我的javascript代码,

allData.filter(data, function (item) {
    item.map(function(list, i) {
        if (list.id.indexOf(addedIds[i]) === -1) {
            return;
        }
        console.log(list);
    });
});

5 个答案:

答案 0 :(得分:7)

这个怎么样?

Array.prototype.filter只需要一个参数:一个传递给数组中每个项目的函数,并返回true或false,具体取决于该项是否应该包含在过滤器中。

您可以使用Array.prototype.indexOf查看字符串是否在数组中。



var allData = [{
  id: '10',
  name: 'jhon'
}, {
  id: '11',
  name: 'lewis'
}, {
  id: '12',
  name: 'taylor'
}, {
  id: '13',
  name: 'adam'
}, {
  id: '14',
  name: 'bolive'
}];

var addedIds = ['10', '12', '14'];

var filteredData = allData.filter(function(item) {
  return addedIds.indexOf(item.id) != -1;
});

console.log(filteredData);




答案 1 :(得分:4)

var string = '1111-2010-10-11';
var a = string.split('-').map(Number);
var date = new Date(a[1], a[2] - 1, a[3]);
var dateString = ((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

console.log(a[0]+ '-' + dateString);

答案 2 :(得分:1)



var allData = [{
  id: '10',
  name: 'jhon'
}, {
  id: '11',
  name: 'lewis'
}, {
  id: '12',
  name: 'taylor'
}, {
  id: '13',
  name: 'adam'
}, {
  id: '14',
  name: 'bolive'
}];

var addedIds = ['10', '12', '14'];
var addedIdsSet = new Set(addedIds);
var result = allData.filter(e => addedIdsSet.has(e.id));
console.log(result)




我个人喜欢将Ids数组转换为Set,然后从那里移动:

var addedIdsSet = new Set(addedIds);

然后剩下的就是使用集合过滤(就像你尝试过的那样):

console.log(allData.filter(x => addedIdsSet.has(x.id)))

注意:如果你有一个很大的ID列表并想要挤出一些性能,那么使用Set只是必需,因为这会降低O(n ^ 2)到O的复杂度( n),其中 n 是allData中元素的数量。 无论如何,我还是喜欢使用Set,因为代码最终也看起来更干净了!

答案 3 :(得分:1)

var allData = [
{
  id:'10',
  name:'jhon'
},
{
  id:'11',
  name:'lewis'
},
{
  id:'12',
  name:'taylor'
},
{
  id:'13',
  name:'adam'
},
{
  id:'14',
  name:'bolive'
}
];

var addedIds = ['10', '12', '14'];

var filteredValues = allData.filter(x => addedIds.indexOf(x.id) !== -1);
console.log(filteredValues);

答案 4 :(得分:0)

你可以这样做:

var allData = [
    {
      id:'10',
      name:'jhon'
    },
    {
      id:'11',
      name:'lewis'
    },
    {
      id:'12',
      name:'taylor'
    },
    {
      id:'13',
      name:'adam'
    },
    {
      id:'14',
      name:'bolive'
    }
];

var addedIds = ['10', '12', '14'];

var filtered_results = [];

allData.filter(function (item) {
  for(var k in addedIds){
      if(item.id === addedIds[k]){
          filtered_results.push(item);
      }
  }
});
console.log(filtered_results);