Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何筛选/搜索多维对象数组?_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 如何筛选/搜索多维对象数组?

Javascript 如何筛选/搜索多维对象数组?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我的数据结构如下: var options = [{ name: "Option One", foo: "bar", values: [{ name: "Value One", value: "Value", options: [{ name: "Option Two", values: [{

我的数据结构如下:

var options = [{
        name: "Option One",
        foo: "bar",
        values: [{
            name: "Value One",
            value: "Value",
            options: [{
                name: "Option Two",
                values: [{
                    name: "Value Two",
                    value: "Value",
                    options: []
                }]
            }]
        }]
    }, {
        name: "Option Three",
        values: [{
            name: "Value Three",
            value: "Value",
            options: []
        }]
    }];
我需要将其展平,过滤掉我不想要的属性,并保持对每个对象深度的了解,如以下数据结构:

var flattenedFilteredOptions = [{
        depth: 0,
        name: "Option One",
        values: [{
            name: "Value One",
            value: "Value"
        }]
    }, {
        depth: 1,
        name: "Option Two",
        values: [{
            name: "Value Two",
            value: "Value"
        }]
    }, {
        depth: 0,
        name: "Option Three",
        values: [{
            name: "Value Three",
            value: "Value"
        }]
    }];

所以基本上我只想要输出中的name、value和value的属性。有人能给我指出正确的方向来开始类似的事情吗?或者有人有解决方案吗?

谢谢大家,下面是我所做的,请记住配置要筛选的属性并不完全是可配置的,递归工作:

   function flattenOptions(optionsArray, depth, flattenedOptions) {
        depth = depth || 0;
        flattenedOptions = flattenedOptions || [];

        for (var i = 0; i < optionsArray.length; i++) {
            var option = optionsArray[i];
            var nextDepth = depth + 1;
            var flattenedOption = {
                depth: depth,
                name: option.name,
                values: flattenValues(option.values, nextDepth, flattenedOptions)
            };

            flattenedOptions.push(flattenedOption);
        }

        return flattenedOptions;
    }

    function flattenValues(valuesArray, nextDepth, flattenedOptions) {
        var values = [];

        for (var i = 0; i < valuesArray.length; i++) {
            var value = valuesArray[i];

            values.push({
                name: value.name,
                value: value.value
            });
            if (value.options.length > 0) {
                flattenOptions(value.options, nextDepth, flattenedOptions);
            }
        }

        return values;
    }

一个解决方案是编写一个递归函数。也许从?开始?谢谢@Jon,这很有效。