在javascript中使用第二个数组过滤数组

时间:2015-12-28 00:55:40

标签: javascript arrays

我有一个简单的javascript数组:

var earningarray = [
  ["2015-12-29T23:59:59+00:00", 3],
  ["2015-12-28T23:59:59+00:00", 3]
];

我有另一个阵列。

var paddingarray = [
  ["2015-12-19T23:59:59+00:00", 0],
  ["2015-12-20T23:59:59+00:00", 0],
  ["2015-12-21T23:59:59+00:00", 0],
  ["2015-12-22T23:59:59+00:00", 0],
  ["2015-12-23T23:59:59+00:00", 0],
  ["2015-12-24T23:59:59+00:00", 0],
  ["2015-12-25T23:59:59+00:00", 0],
  ["2015-12-26T23:59:59+00:00", 0],
  ["2015-12-27T23:59:59+00:00", 0],
  ["2015-12-28T23:59:59+00:00", 0]
];

我想要实现的是根据日期戳(第一列)从paddingarray中删除它们在incomearray中存在的行。

我尝试过使用此功能:

newarray = paddingarray.filter(function(val) {
  return earningarray[0].indexOf(val[0]) == -1;
});

然而,它不能正确过滤数组并输出与原始paddingarray完全相同的输出。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试使用Array.prototype.some()

var earningarray = [
  ["2015-12-29T23:59:59+00:00", 3],
  ["2015-12-28T23:59:59+00:00", 3]
];

var paddingarray = [
  ["2015-12-19T23:59:59+00:00", 0],
  ["2015-12-20T23:59:59+00:00", 0],
  ["2015-12-21T23:59:59+00:00", 0],
  ["2015-12-22T23:59:59+00:00", 0],
  ["2015-12-23T23:59:59+00:00", 0],
  ["2015-12-24T23:59:59+00:00", 0],
  ["2015-12-25T23:59:59+00:00", 0],
  ["2015-12-26T23:59:59+00:00", 0],
  ["2015-12-27T23:59:59+00:00", 0],
  ["2015-12-28T23:59:59+00:00", 0]
];

var newarray = paddingarray.filter(function(val) {
  return !earningarray.some(function(v) {
    return v[0] === val[0]
  })
});

console.log(paddingarray.length, newarray.length)

答案 1 :(得分:1)

您的函数尝试在paddingarray中找到earningarray[0]中的值,这是该数组的第一个元素,而不是在该数组的每个元素的第一个元素中。

请改为尝试:

paddingarray.filter(function(val) {
    return earningarray.filter(function(val2) {
        return val2[0] == val[0]
    }).length == 0;
});