Javascript键/值与数组配对

时间:2017-01-20 14:51:24

标签: javascript arrays associative-array key-value

我试图围绕着如何在结构上完成这样的事情:

var keywordDataProducts = 
      [
            {"keyword" : "keyword1", "list" : [ "DP1", "DP2" ] },
            {"keyword" : "keyword2", "list" : [ "DP1" ] } 
      ];

但当然,没有硬编码的值。例如,我们当前循环遍历所有DP值(DP1,DP2,DP3等) - 它们都具有0-M关键字。我试图创建一个反向查找,在那里你可以得到所有使用特定关键字的DP。我的代码完全使用上面的结构,但我只需要动态填充数据。

我是否初始化var keywordDataProducts = [];声明中包含任何内容,或者定义具有关键字和列表(这是一个数组)的结构?或者你把它作为一个没有任何关于它的数组,并在你添加项目时定义它?

我听说过关联数组可以用于这样的情况,但我现在还没有完全理解这一点。我也看到了{}用法的对象,但没有推送,我需要一组关键字,其中还包含DP数组(列表)。想法?

3 个答案:

答案 0 :(得分:1)

你会做这样的事情,但你没有清楚地描述输入的内容以及你正在寻找的输出。

function fn (input) {
  var ouput = {};
  input.forEach( function (DP) {
    for (prop in DP) {
      if (DP.hasOwnProperty(prop) {
        if (output[prop]) {
          output[prop].push(DP);
        } else {
          output[prop] = [DP];
        }
      } 
    }
  });
  return output;
}

这需要这种输入

[{"alpha":...}, {"beta":..., "delta":...}, {"alpha":..., "gamma":...}]

并返回

{"alpha":[{"alpha":...}, {"alpha":..., "gamma":...}]}, "beta":{"beta":..., "delta":...}, "delta":{"beta":..., "delta":...}, "gamma":{"alpha":..., "gamma":...}}

答案 1 :(得分:1)

您可以将对象视为关联数组,而不必使用“push”添加新元素。

// Create your object like this
var keywordDataProducts = 
{ 
    "keyword1" : { "list" : [ "DP1", "DP2"] },
    "keyword2" : { "list" : [ "DP1" ] }
};

// Treat it like an associative array
var keyword1 = keywordDataProducts["keyword1"];
alert("keyword1 = " + keyword1.list.join(", "));

// Add to it like this
keywordDataProducts["keyword3"] = { "list" : ["DP3", "DP4"] };

// See the new object includes your new keyword
alert(JSON.stringify(keywordDataProducts));    

// To iterate the keys of your object, you can do something like this
for(var item in keywordDataProducts)
{
    if(keywordDataProducts.hasOwnProperty(item))
    {
        alert(item);
    }
}  

你可以在这里看到小提琴; https://jsfiddle.net/gksjtwr6/2/

答案 2 :(得分:1)

我不知道你想要什么输出所以我只是创建了一个对象,每个关键字都是DP值的关键。



var data = [{dp: "dp1", keys: ["key1", "key2", "key3"]}, {dp: "dp2", keys: ["key1", "key2", "key3"]}, {dp: "dp3", keys: ["key1", "key2", "key3"]},];

function keyWordArray(arr) {
	var newObj = {};
  arr.forEach((obj) => {
  	obj.keys.forEach((keyVal) => {
    	if(newObj.hasOwnProperty(keyVal)){
      	newObj[keyVal].dp.push(obj.dp);
      } else {
      	newObj[keyVal] = {dp:[obj.dp],};
      }
    });	
  });
  return newObj;
}

document.getElementById("data").innerHTML = JSON.stringify(keyWordArray(data));

<div id="data">
</div>
&#13;
&#13;
&#13;