首页 > 解决方案 > 过滤数据并映射唯一接收到的数据

问题描述

我面临一个问题。

var arr = ['VBH', 'KTL', 'PVC', 'IF & AF', 'BC', 'CC&HC', 'UBS', 'FAD&DVD'];
var obj = [
             {"materialTypeID":9,"name":"","abbreviation":"UBS","count":1,"duns":0,"plantId":0},
             {"materialTypeID":18,"name":null,"abbreviation":"PVC","count":1,"duns":0,"plantId":0},
             {"materialTypeID":7,"name":"","abbreviation":"FAD&DVD","count":4,"duns":0,"plantId":0}
          ];

我希望结果以排序格式显示为 arr 变量显示,例如 VBH 对象或 KTL 对象(如果他们找到的话)。

[       
{"materialTypeID":18,"name":null,"abbreviation":"PVC","count":1,"duns":0,"plantId":0},
{"materialTypeID":9,"name":"","abbreviation":"UBS","count":1,"duns":0,"plantId":0},
{"materialTypeID":7,"name":"","abbreviation":"FAD&DVD","count":4,"duns":0,"plantId":0}
]

在java脚本中,我想实现。

谢谢,

标签: javascriptangular

解决方案


循环arr并使用过滤器从obj. filter将返回一个新数组,检查这个新数组的长度是否大于 0 ,然后用于push放置元素

var arr = ['VBH', 'KTL', 'PVC', 'IF & AF', 'BC', 'CC&HC', 'UBS', 'FAD&DVD']
var obj = [{
  "materialTypeID": 9,
  "name": "",
  "abbreviation": "UBS",
  "count": 1,
  "duns": 0,
  "plantId": 0
}, {
  "materialTypeID": 18,
  "name": null,
  "abbreviation": "PVC",
  "count": 1,
  "duns": 0,
  "plantId": 0
}, {
  "materialTypeID": 7,
  "name": "",
  "abbreviation": "FAD&DVD",
  "count": 4,
  "duns": 0,
  "plantId": 0
}]

let sortedArray = [];

arr.forEach(function(item) {
  let getElem = obj.filter(function(items) {
    return items.abbreviation === item

  })
  if (getElem.length > 0) {
    sortedArray.push(getElem[0])
  }

})

console.log(sortedArray)


推荐阅读