比较字符串数组与另一个数组

时间:2017-01-17 21:40:42

标签: javascript

如何比较下面的字符串数组和对象数组,并吐出另一个数组中不匹配的值?

字符串数组:

["2018", "2017", "2016", "2015", "2014"]

对象数组:

[ {"fiscalYear": "2018"},{"fiscalYear": "2017"},{"fiscalYear": "2016"}]

预期结果应该是另一个字符串数组["2015", "2014"]

谢谢!

3 个答案:

答案 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循环来做这件事并不会有什么坏处。了解这一点将有助于您了解将来如何遍历不同的数据结构。