从Javascript中的两个嵌套数组中获取一个对象

Get an object from two nested array in Javascript

本文关键字:嵌套 两个 数组 获取 一个对象 Javascript      更新时间:2023-09-26

我想要一个来自两个数组的对象,我按照以下方式完成了。

for (var j = 0; j < rawDataRows.length; j++) {
        for (var i = 0; i < categories.length; i++) {
            var category = categories[i];
            var rowValue = rawDataRows[j];
            // here I do got the right value for category
            console.log(category); 
            console.log(rowValue);
            // but the following line doesn't interpret category as a variable
            formattedDataRows.push({category: rowValue});
        }
}

我以为我能得到这样的东西:

[{"category1": "value1"},{"category2": "value2"}, {"category3": "value3"}]

然而,事实证明我得到了:

[{"category": "value1"}, {"category": "value2"}, {"category": "value3"}]

有人能指出我错在哪里吗?此外,如果你有更好的方法来实现目标,请留下评论。Javascript只是没有jQuery或其他框架。谢谢

ECMAScript 5及更低版本中的对象文字语法不允许将变量标识符指定为属性名称。而是先创建对象,然后使用括号表示法。

var o = {};
o[category] = rowValue;
formattedDataRows.push(o);

使用ECMAScript 6,您可以执行以下操作:

formattedDataRows.push({[category]: rowValue});

当然,目前对该语法的支持是有限的。

如果你想让两个值一起递增(看起来),同时假设类别的长度与rawdataRows的长度相同,我认为你真的想要一个循环而不是两个循环:

for (var i = 0; i < categories.length; i++) {
            var category = categories[i];
            var rowValue = rawDataRows[i];

您可以根据需要使用categories[i].toString();来获取字符串:

var categories = ["category1", "category2", "category3"];
var rawDataRows = ["value1", "value2", "value3"];
var formattedDataRows = [];
for (var j = 0; j < rawDataRows.length; j++) {
  for (var i = 0; i < categories.length; i++) {
    var category = categories[i].toString();
    var rowValue = rawDataRows[j].toString();
    var tmpObj = {}
    tmpObj[category] = rowValue
    formattedDataRows.push(tmpObj);
    
   //formattedDataRows.push({[category]: rowValue});
  }
}
document.write(JSON.stringify(formattedDataRows))