用javascript遍历映射中的数组

Iterate through an array in a map in javascript

本文关键字:数组 映射 javascript 遍历      更新时间:2024-05-11

我是javascript的新手,我很难理解如何使用键数组来提取映射,然后从映射中的数组中提取值,而不完全重新创建映射。我的两个数据结构看起来像。

var keys = ["key1","key2","key3"]
var data = {
"key1": {
    "target": "hostname",
    "datapoints": [
        [12, 1.42472334E9],
        [13, 1.424723355E9],
        [14, 1.42472337E9]]},
"key2": {
    "target": "hostname",
    "datapoints": [
        [15, 1.42472334E9],
        [16, 1.424723355E9],
        [17, 1.42472337E9]]}}

我正试图提取数据点,将它们放入两个数组中,以便根据关键字进行绘图。尝试像一样迭代

for (var k in key)
    for (var v in data[key][datapoints])

显然不是正确的方法。有没有更好的方法可以在不撕裂地图的情况下获得数据?

打开浏览器javascript控制台(按F12)查看演示中的输出。

jsfiddle演示

var keys = ["key1","key2","key3"]
var data = {
"key1": {
    "target": "hostname",
    "datapoints": [
        [12, 1.42472334E9],
        [13, 1.424723355E9],
        [14, 1.42472337E9]]},
"key2": {
    "target": "hostname",
    "datapoints": [
        [15, 1.42472334E9],
        [16, 1.424723355E9],
        [17, 1.42472337E9]]}
}
//loop through the array named keys (mind that k is an index/integer)
for (var k in keys){
    //check if data has "key" as property (ie: key3 does not exist in data)
    if(data.hasOwnProperty(keys[k])){
        //loop through the array datapoints which is a property of the object named data 
        for ( var i =0; i< data[keys[k]]["datapoints"].length; i++){
          console.log(data[keys[k]]["datapoints"][i]); //outputs an array with 2 elements
        }
    }else{console.log(keys[k]+" does not exist in data")}
}

若您想要一个数据点数组,可以执行类似data.key1.datapoints[0]的操作。这将为您提供一个存储在key1下的数据点数组。

您可以循环遍历数组keys,然后提取datapoints,如下所示:

for (var i=0; i < keys.length; i++) {
    var datapoints = data[keys[i]].datapoints;
    // do whatever you want to do with the datapoints. 
    // It's not clear from your question.
}