按键而不是索引访问值

时间:2017-10-11 09:02:11

标签: javascript d3.js

我读了一个json文件(基本上是平面表)并动态嵌套数据。我得到类似于:

的嵌套数据
[{key: "AAA", value: 100}, {key: "BBB", value: 200}, {key: "CCC", value: 150}]

通过索引访问密钥和/或值是没有问题的,例如dat[0].keydat[1].value。但是如何通过不使用(因为不知道)其索引来直接访问值。即dat [“BBB”]。value或dat [“AAA”]。value

如果我仍然需要通过索引访问数据,那么键/值对的用处是什么。在我的情况下,这意味着,首先以某种方式确定特定键的索引,然后按键引用。

我很确定,这是一个非常愚蠢的问题,我为此道歉,但经过几天的网络搜索,我仍然无法找到答案。

非常感谢任何帮助

5 个答案:

答案 0 :(得分:1)

可以通过对象在JS中实现地图的形式。

以下是一个例子:

var data = {
  "key": "value"
}

console.log(data.key); // prints 'value'
console.log(data["key"]); // prints 'value'

您可以将数据解析为以下对象:

function parseDataIntoObject(dataArray) {
  var data = {};
  dataArray.forEach(
    (object) => {
      data[object.key] = object.value;
    }
  );
  return data;
}

然后您可以获取data["AAA"]等数据。

如果需要,我可以提供更多关于这个主题的例子。

答案 1 :(得分:1)

使用数组find方法:

let data = [{key: "AAA", value: 100}, {key: "BBB", value: 200}, {key: "CCC", value: 150}]

let item1 = data.find(x => x.key === 'AAA')
let item2 = data.find(x => x.key === 'BBB')
let item3 = data.find(x => x.key === 'CCC')

console.log(item1, item2, item3)

请注意:这只会返回匹配key的对象的第一个实例。对于多个对象,请使用此处发布的其他解决方案之一。

答案 2 :(得分:0)

尝试类似

的内容
function getByKey( arr, key )
{
   var results = arr.filter( function( item ){ item.key == key });
   var value = results ? results[0].value : "" 
   return value; 
}

getByKey( data, "AAA" ); //this will return the value for AAA

答案 3 :(得分:0)

返回与键匹配的第一个对象。如果需要多个匹配对象的数组,可以根据需要进行更改

 var data = [{key: "AAA", value: 100}, {key: "BBB", value: 200}, {key: "CCC", value: 150}];
 var keyToFilter = "AAA";//could be anything

 var resultObj = data.filter(function(obj){return obj.key === keyToFilter })[0];

答案 4 :(得分:0)

DO

const arr = [{key: "AAA", value: 100}, {key: "BBB", value: 200}, {key: "CCC", value: 150}]

const item = arr.filter(obj => obj.key === "BBB")[0];

console.log(item.value);

基本上,这会过滤数组中相同的键,然后通过第一项

获取值

如果没有项目,请测试以下

if (item.length > 0) // ...