从多维数组中获取对象

时间:2017-09-07 15:03:20

标签: javascript arrays

我有三个数组填充了JavaScript中的对象,我已将其放入多维数组中,以便获得所有三个对象的所有可能组合,以创建一组规则'。然后在代码中我希望能够提取这些对象的属性,但是当我尝试所有我似乎能够得到的是字符串" [object]"而不是实际的对象本身。

这是数组的组合方式:

var allArrays = [settings.serviceLevels, settings.serviceDays, settings.services];
function allPossibleCases(arr) {
    if (arr.length === 1) {
        return arr[0];
    } else {
        var result = [];
        var allCasesOfRest = allPossibleCases(arr.slice(1)); 
        for (var i = 0; i < allCasesOfRest.length; i++) {
            for (var j = 0; j < arr[0].length; j++) {
                result.push(arr[0][j] + allCasesOfRest[i]);
            }
        }
        return result;
    }
}
var uncheckedRules = allPossibleCases(allArrays);

我需要能够从settings.serviceLevels,settings.serviceDays和settings.services中获取属性 - 我可以找到使用常规数组而不是对象执行此操作的问题 - 这是否可行或者我是否已经使用它到了我失去财产的程度?

1 个答案:

答案 0 :(得分:0)

不确定我明白你想要什么。但这是一个递归函数,它将在数组中存储另一个数组中包含的对象的属性:

function listProps(object, result) {
    // for each property of the object : 
    for (objectProperty in object) {
        // if it's an object, recursive call : 
        if (typeof object[objectProperty] === 'object') {
            listProps(object[objectProperty], result);
        } else { // otherwise, push it into the result array : 
            result.push(object[objectProperty]);
        }
    }
}

var allArrays = [settings.serviceLevels, settings.serviceDays, settings.services];
var result = [];
listProps(allArrays, result);

result数组应该列出三个对象settings.serviceLevels,settings.serviceDays,settings.services及其子节点中的每个属性(如果它们本身包含任何对象)。