通过array.filter函数

时间:2018-03-14 19:10:07

标签: javascript arrays functional-programming javascript-objects

我不确定我的头衔是否恰当地表达了我想要的东西。我基本上需要根据两个不同的属性从一个对象数组中过滤出一堆项目,这两个属性需要与另一个数组相同,那么......更像是它们需要与最后一个相同另外一个阵列的6项。

我目前正在手动执行此操作,这给了我这个丑陋的代码:

const filteredList = list.filter(x => {
  return (
    (x.someProperty === parseInt(anotherList[anotherList.length - 1][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 1][0].anotherProperty) ||
    (x.someProperty === parseInt(anotherList[anotherList.length - 2][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 2][0].anotherProperty) ||
    (x.someProperty === parseInt(anotherList[anotherList.length - 3][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 3][0].anotherProperty) ||
    (x.someProperty === parseInt(anotherList[anotherList.length - 4][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 4][0].anotherProperty) ||
    (x.someProperty === parseInt(anotherList[anotherList.length - 5][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 5][0].anotherProperty) ||
    (x.someProperty === parseInt(anotherList[anotherList.length - 6][0].someProperty, 10) && x.anotherProperty === anotherList[anotherList.length - 6][0].anotherProperty)
  )
}

就像现在一样,它目前正在运作,但必须有一个更好的方法来做到这一点,这是我想知道的。那么有没有一种方法可以做到这一点,而无需为anotherList的每个项目列出并进行比较?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用最后六项并检查给定值。

const filteredList = list.filter(x =>
    anotherList
        .slice(-6)
        .some(item =>
            x.someProperty === Math.floor(item[0].someProperty) &&
            x.anotherProperty === Math.floor(item[0].anotherProperty)));

键的数组略短。

const filteredList = list.filter(x =>
    anotherList
        .slice(-6)
        .some(item =>
            ['someProperty', 'anotherProperty'].every(k =>
                x[k] === Math.floor(item[0][k]))));