组合一个对象的所有 forEach
combine all forEach of an object
我有一个对象如下
data = {
Sam: { details: [ /* array items */ ] },
Jill: { details: [ /* array items */ ] },
Bill: { details: [ /* array items */ ] },
}
然后我有下面的代码根据名称过滤数据
filteredData = {};
Object.keys(data).forEach((name) => {
filteredData[name] = data[name];
});
我在下面的构造函数中调用它来获取特定名称的 details
vis.dataFilteredTemp = filteredData[vis.name];
vis.dataFiltered = vis.dataFilteredTemp["details"];
如果 vis.name
是 Jill
,那么输出是 {details: Array(3)}
& 这工作得很好。
现在,我想要使用 is filteredData
方法的所有名称的详细信息。我该怎么做?
如果我做 vis.dataFilteredTemp = filteredData[]
(传递空数组),预期的输出是 {details: Array(13)}}
。 13个数组,因为所有名字的数组都加起来了。
因为我正在使用 d3.csv,所以我无法将 data
直接传递给构造函数。有人可以帮忙吗?
迭代 Object.values
, and use flatMap
以合并每个数组的 details
。
const data = {
Sam: { details: [1,2,3,4]},
Jill: { details: [4,5,6] },
Bill: { details: [7,8,9,10,11,12] }
};
function getData(data, name = '') {
if (name) return { details: data[name].details };
return { details: Object.values(data).flatMap(arr => arr.details) };
}
console.log(getData(data));
console.log(getData(data, 'Jill'));
如果我理解的很好,你应该使用Array.reduce
const data = {
Sam: { details: [1,2] },
jenn: { details: [3,4] },
kurt: { details: [6, 9 , 10, 16] }
};
const result = Object.values(data).reduce((acc = {details: []}, val) => {
acc.details.push(...val.details);
return acc;
});
console.log(result.details);
输出:[1, 2, 3, 4, 6, 9, 10, 16]
我有一个对象如下
data = {
Sam: { details: [ /* array items */ ] },
Jill: { details: [ /* array items */ ] },
Bill: { details: [ /* array items */ ] },
}
然后我有下面的代码根据名称过滤数据
filteredData = {};
Object.keys(data).forEach((name) => {
filteredData[name] = data[name];
});
我在下面的构造函数中调用它来获取特定名称的 details
vis.dataFilteredTemp = filteredData[vis.name];
vis.dataFiltered = vis.dataFilteredTemp["details"];
如果 vis.name
是 Jill
,那么输出是 {details: Array(3)}
& 这工作得很好。
现在,我想要使用 is filteredData
方法的所有名称的详细信息。我该怎么做?
如果我做 vis.dataFilteredTemp = filteredData[]
(传递空数组),预期的输出是 {details: Array(13)}}
。 13个数组,因为所有名字的数组都加起来了。
因为我正在使用 d3.csv,所以我无法将 data
直接传递给构造函数。有人可以帮忙吗?
迭代 Object.values
, and use flatMap
以合并每个数组的 details
。
const data = {
Sam: { details: [1,2,3,4]},
Jill: { details: [4,5,6] },
Bill: { details: [7,8,9,10,11,12] }
};
function getData(data, name = '') {
if (name) return { details: data[name].details };
return { details: Object.values(data).flatMap(arr => arr.details) };
}
console.log(getData(data));
console.log(getData(data, 'Jill'));
如果我理解的很好,你应该使用Array.reduce
const data = {
Sam: { details: [1,2] },
jenn: { details: [3,4] },
kurt: { details: [6, 9 , 10, 16] }
};
const result = Object.values(data).reduce((acc = {details: []}, val) => {
acc.details.push(...val.details);
return acc;
});
console.log(result.details);
输出:[1, 2, 3, 4, 6, 9, 10, 16]