我有一个简单的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完全相同的输出。有什么想法吗?
答案 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;
});