首页 > 解决方案 > 无论顺序如何,如何获取数组值和对象键值匹配

问题描述

在值数组中

var legends =['some','key', 'value'];

带有相应 obj 值的图表;

var graph = {
  orgid: ['123', '123556', '456', '345', '2345'],
  some: [1500, 1500, 1500, 1500, 1500],
  key: [900, 900, 900, 900, 900],
  value: [1072, 1373, 946, 715, 276]
 };

我想提取仅包含要插入到另一个数组中的数组中提到的键值的图形

我已经执行了代码,但它仅在键的顺序与 obj 中提到的顺序相同时才有效

es5方式

var grphFilter = [];
var countRaw = 0; 
for (var key in graph) {
  if (key === legends[count] ) {
    grphFilter.push(graph[key]);
    count++;
  }
}

es6方式

let grphFilter = [];
let count = 0; 
const result = Object.entries(graph).forEach(function([key, value]) {
  if (key === legends[count]) {
    grphFilter.push(value);
    count++
  }
})

但它不适用于不按顺序排列的键。

var legendsNotOrder =['key', 'some', 'value'];

无论图例数组中值的顺序如何,结果都应该是最终结果,无论是它legends还是legendsNotOrder

最后结果

var graphfiltered = [
  [1500, 1500, 1500, 1500, 1500],
  [900, 900, 900, 900, 900],
  [1072, 1373, 946, 715, 276]
];

标签: javascriptarraysobjectecmascript-6

解决方案


您可以遍历数组并仅从对象中获取所需的属性值。

var legends =['some','key', 'value'];

var graph = {orgid: ['123', '123556', '456', '345', '2345'],some: [1500, 1500, 1500, 1500, 1500],key: [900, 900, 900, 900, 900],value: [1072, 1373, 946, 715, 276]};
 
let filteredGraph = legends.map( cur => graph[cur])

console.log(filteredGraph)


//In case you have keys in legend which are not available in graph you can use below code

let filteredGraph = legends.filter( cur => graph[cur])


推荐阅读