我试图围绕着如何在结构上完成这样的事情:
var keywordDataProducts =
[
{"keyword" : "keyword1", "list" : [ "DP1", "DP2" ] },
{"keyword" : "keyword2", "list" : [ "DP1" ] }
];
但当然,没有硬编码的值。例如,我们当前循环遍历所有DP值(DP1,DP2,DP3等) - 它们都具有0-M关键字。我试图创建一个反向查找,在那里你可以得到所有使用特定关键字的DP。我的代码完全使用上面的结构,但我只需要动态填充数据。
我是否初始化var keywordDataProducts = [];声明中包含任何内容,或者定义具有关键字和列表(这是一个数组)的结构?或者你把它作为一个没有任何关于它的数组,并在你添加项目时定义它?
我听说过关联数组可以用于这样的情况,但我现在还没有完全理解这一点。我也看到了{}用法的对象,但没有推送,我需要一组关键字,其中还包含DP数组(列表)。想法?
答案 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;