来自多个数组值的Javascript匹配

Ari*_*san 7 javascript

这是我的数据数组:

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
]
Run Code Online (Sandbox Code Playgroud)

我想通过另一个数组来匹配数组元素,例如:

let match= [1022692502, 1012182502]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,预期结果是:

[
    {
        "fineAmount": 20
    },
    {
        "fineAmount": 0
    }
]

Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Pra*_*lan 1

使用Array#filter方法过滤掉需要的值,然后使用Array#map方法格式化数组元素。

var res = myvalue
  // filter out elements
  .filter(({ feeSubHeadId }) => match.includes(feeSubHeadId))
  // format array elements
  .map(({ fineAmount }) => ({ fineAmount }));
Run Code Online (Sandbox Code Playgroud)

var res = myvalue
  // filter out elements
  .filter(({ feeSubHeadId }) => match.includes(feeSubHeadId))
  // format array elements
  .map(({ fineAmount }) => ({ fineAmount }));
Run Code Online (Sandbox Code Playgroud)

或者通过Array#reduce方法可以将两者结合起来。

var res = myvalue
  // iterate and push into array if id found
  .reduce((arr, { feeSubHeadId,fineAmount }) => {
    if (match.includes(feeSubHeadId)) arr.push({ fineAmount: fineAmount });
    // return array reference for next iteration
    return arr;
    // set intial value as empty array for result
  }, []);
Run Code Online (Sandbox Code Playgroud)

let myvalue= [
    {
        "feeSubHeadId": 1022692502,
        "feeSubHeadName": "Quiz-01",
        "fineAmount": 20
    },
    {
        "feeSubHeadId": 1012182502,
        "feeSubHeadName": "Half Yearly Exam",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1022682502,
        "feeSubHeadName": "Quiz-02",
        "fineAmount": 0
    },
    {
        "feeSubHeadId": 1012192502,
        "feeSubHeadName": "Annual Exam",
        "fineAmount": 0
    }
]
let match= [1022692502, 1012182502]


var res = myvalue
  .filter(({ feeSubHeadId }) => match.includes(feeSubHeadId))
  .map(({ fineAmount }) => ({ fineAmount }));
  
console.log(res);
Run Code Online (Sandbox Code Playgroud)

为了提取对象属性,我使用了 ES6解构赋值功能。