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,这很有效。