首页 > 解决方案 > 当键是用户输入时,我应该如何使用 map 来取回对象的某些值

问题描述

我有如下数据:

0: Object { IG: "Low income", FLFPR: 47.00099945, lnGDP: 7.496679918, … }
​​
1: Object { IG: "Upper middle income", FLFPR: 47.67599869, lnGDP: 9.302921813, … }
​​
2: Object { IG: "Upper middle income", FLFPR: 15.18999958, lnGDP: 9.526954146, … }
​​
3: Object { IG: "Lower middle income", FLFPR: 75.47899628, lnGDP: 8.802498179, … }
​​
4: Object { IG: "High income", FLFPR: 47.82500076, lnGDP: 9.858328453, … }
​​
5: Object { IG: "Upper middle income", FLFPR: 51.16600037, lnGDP: 9.011393414, … }

我只需要从每个对象中说 IG 和 FLFPR。另外,我不知道 IG 和 FLFPR 的值。它们是用户输入。例如,inputx = IG 和 inputy = FLFPR。

我尝试使用地图,但我无法让它工作。我知道下面的代码是不正确的,但直觉上这就是我需要的。

xydata = data.map(item => {x: item.inputx, y: item.inputy});

在这种情况下使用地图是否正确?

编辑:

    dat = [{x: 8, y: 3, z:5},{x: 2, y: 10, z:5},{x: 11, y: 3, z:5},{x: 6, y: 6, z:5},{x: 5, y: 8, z:5}]
    xText = 'x'
    yText = 'y'  
    xydata = dat.map(item => ({x: item.[xText], y: item.[yText]}));

标签: javascriptd3.js

解决方案


您可以使用[]动态访问对象属性。

let x = {dog: 3, cat: 4, key: 5};
let key = 'dog';

console.log(x.key); // 5
console.log(x['key']); // also 5
console.log(x[key]); // 3

在你的情况下:

xydata = data.map(item => ({x: item[inputx], y: item[inputy]}));

同样,您可以[]在创建具有动态属性名称的对象时使用。

let key = 'dog';
let x = {
  cat: 5,
  [key]: 6,
  key: 7,
};

console.log(x.key); // 7
console.log(x.dog); // 6


推荐阅读