借助 for 循环和数组在对象中添加属性

Add properties in object with the help of a for loop and arrays

我正在尝试向来自数组的对象添加属性。 这是我使用的代码:

var data = {};
var arr_years = [2013, 2014, 2015];
var arr_quarters2013 = ['Q2', 'Q3', 'Q4'];
var arr_quarters2014 = ['Q1', 'Q2', 'Q3', 'Q4'];
var arr_quarters2015 = ['Q1', 'Q2', 'Q3', 'Q4'];

function createYearObjects() {
    for (var i in arr_years) {
        data[arr_years[i]] = '';
    }
}

我正在尝试将数组中每年的季度添加到我的对象中 属性 的右侧。假设在 2013 年我只有 Q2、Q3 和 Q4。所以这是我的第一次尝试。我认为保持简单就可以了:

function fillYearObjectsWithQuarters() {
    for (var prop in data) {
        data[prop] = arr_quarters[prop];
    }
}

因为那没有成功,我试着把它作为一个字符串放在一起,但我所有的想法最终只在节点中给我字符串 'arr_quarters2013' - 'arr_quarters2015' 这不是我想要的想要,我想获得对具有该名称的数组的引用!

function fillYearObjectsWithQuarters() {
    for (var prop in data) {
        var temp = prop.toString();
        var tempString = 'arr_quarters'+temp.toString();
        console.log(tempString);
    }
}

还想过为什么不试一试并摆脱任何可能的异步。嗯,这个任务不应该让我接近任何异步问题,但仍然尝试过。

createYearObjects();
setTimeout(function() {
    fillYearObjectsWithQuarters();
}, 250);

解决方案是根据你提供的参数,所以使用eval(不太好)... JSFiddle code - eval solution

var data = {};
var arr_years = [2013, 2014, 2015];
var arr_quarters2013 = ['Q2', 'Q3', 'Q4'];
var arr_quarters2014 = ['Q1', 'Q2', 'Q3', 'Q4'];
var arr_quarters2015 = ['Q1', 'Q2', 'Q3', 'Q4'];
var current_year;
var quarter_year;


function createYearObjects(yearsArray) {
    for (var i=0;i<yearsArray.length;i++) {
        current_year = yearsArray[i];
        quarter_year = eval("arr_quarters"+current_year);
        //console.log("quarter_year: ",quarter_year);
        if (current_year) {
            data[current_year] = quarter_year;
        }
    }
}

createYearObjects(arr_years);

var resultDiv = document.getElementById("result");
resultDiv.innerHTML = JSON.stringify(data);

更好的解决方案(没有 eval):

JSFiddle code - without eval solution

var data = {};
var arr_years = [2013, 2014, 2015];
var arr_quarters = {}
arr_quarters["2013"] = ['Q2', 'Q3', 'Q4'];
arr_quarters["2014"] = ['Q1', 'Q2', 'Q3', 'Q4'];
arr_quarters["2015"] = ['Q1', 'Q2', 'Q3', 'Q4'];
var current_year;
var quarter_year;

function createYearObjects(yearsArray) {
    for (var i=0;i<yearsArray.length;i++) {
        current_year = yearsArray[i];
        quarter_year = arr_quarters[current_year];
        //console.log("quarter_year: ",quarter_year);
        if (current_year) {
            data[current_year] = quarter_year;
        }
    }
}

createYearObjects(arr_years);

var resultDiv = document.getElementById("result");
resultDiv.innerHTML = JSON.stringify(data);