如何比较下面的字符串数组和对象数组,并吐出另一个数组中不匹配的值?
字符串数组:
["2018", "2017", "2016", "2015", "2014"]
对象数组:
[ {"fiscalYear": "2018"},{"fiscalYear": "2017"},{"fiscalYear": "2016"}]
预期结果应该是另一个字符串数组["2015", "2014"]
。
谢谢!
答案 0 :(得分:3)
您需要在第二个数组的帮助下过滤掉第一个数组中的值。也许是这样的:
const arr1 = ["2018", "2017", "2016", "2015", "2014"]
const arr2 = [{"fiscalYear": "2018"},{"fiscalYear": "2017"},{"fiscalYear": "2016"}]
const result = arr1.filter(val => !arr2.find(el => el.fiscalYear === val))
console.log(result)
答案 1 :(得分:1)
基本上是@ dfsq的答案,但没有使用箭头功能(ES6):
var years = ["2018", "2017", "2016", "2015", "2014"];
var fiscalYears = [ {"fiscalYear": "2018"},{"fiscalYear": "2017"},{"fiscalYear": "2016"}];
var filtered = years.filter(function(year1) {
return !(fiscalYears.find(function(year2) {
return (year2.fiscalYear === year1);
}));
});
console.log(filtered);

答案 2 :(得分:1)
如果您遇到此问题,可能需要采用老式的方式来学习基础知识。
var years = ["2018", "2017", "2016", "2015", "2014"];
objects = [ {"fiscalYear": "2018"},{"fiscalYear": "2017"},{"fiscalYear": "2016"}];
var yearsNotFound = [];
for (var i = 0; i < years.length; i++) {
var found = false;
for (var j = 0; j < objects.length; j++) {
if (years[i] == objects[j].fiscalYear) {
found = true;
break;
}
}
if (!found)
yearsNotFound.push(years[i]);
}
console.log(yearsNotFound);
我可能更喜欢@dfsq的答案,但是如果你是初学者,我认为看看如何使用老式的for循环来做这件事并不会有什么坏处。了解这一点将有助于您了解将来如何遍历不同的数据结构。