我正在尝试将此对象数组转换为其他格式:
let data = [
{
Dimension_ID: 1,
A1: 'N'
}, {
Dimension_ID: 2,
A1: 'N'
}, {
Dimension_ID: 3,
A1: 'N'
}, {
Dimension_ID: 917,
A1: 'P'
}, {
Dimension_ID: 918,
A1: 'P'
}, {
Dimension_ID: 919,
A1: 'P'
}, {
Dimension_ID: 1,
B1: 'Q'
}, {
Dimension_ID: 2,
B1: 'Q'
}, {
Dimension_ID: 3,
B1: 'Q'
}
];
我想创建一个像这样的新对象:
let params = [];
params['filterValues'] = { A1: [ 'N', 'P' ],B1: [ 'Q' ] };
这是我要使用的JavaScript代码。
if(params.filterValues != undefined){
params.dimensionIds2 = [];
for (var key in params.filterValues) {
if(params.filterValues[key].length > 0)
params.filterValues[key].map((value)=>{
let filterData = data.filter(item => item[key] == value);
filterData.map((filterItem)=>{
console.log(key,value,filterItem.Dimension_ID);
//params.dimensionIds2[key][value].push(filterItem.Dimension_ID)
})
})
}
}
我可以像这样在循环中使用console.log值:
我想使用以下数据:
data ['A1'] ['N'] = [1,2,3]
data ['A1'] ['P'] = [917,918,919]
data ['B1'] ['Q'] = [1,2,3]
我也尝试使用此代码:
params.dimensionIds2[key][value].push(filterItem.Dimension_ID)
答案 0 :(得分:0)
您可以尝试以此来整理数据。
let data = [
{Dimension_ID: 1, A1: 'N'},
{Dimension_ID: 2, A1: 'N'},
{Dimension_ID: 3, A1: 'N'},
{Dimension_ID: 917, A1: 'P'},
{Dimension_ID: 918, A1: 'P'},
{Dimension_ID: 919, A1: 'P'},
{Dimension_ID: 1, B1: 'Q'},
{Dimension_ID: 2, B1: 'Q'},
{Dimension_ID: 3, B1: 'Q'},];
const params = {A1: ['N', 'P'], B1: ['Q']};
const organize = (data, params) =>
Object.keys(params).reduce((acc, val) => {
acc[val] = params[val].reduce((a, v) => {
a[v] = data
.filter((value) => value[val] === v)
.map(value => value.Dimension_ID);
return a;
}, {});
return acc;
}, {});
console.log(organize(data, params));
答案 1 :(得分:0)
另一种嵌套的Array#reduce()
方法。请注意,您要params
并将结果作为对象而不是数组,以便为键使用字符串值
let params = {};
let data = [{ Dimension_ID: 1,A1: 'N'},{ Dimension_ID: 2,A1: 'N'},{ Dimension_ID: 3,A1: 'N'},
{ Dimension_ID: 917,A1: 'P'},{ Dimension_ID: 918,A1: 'P'},{ Dimension_ID: 919,A1: 'P'},
{ Dimension_ID: 1,B1: 'Q'},{ Dimension_ID: 2,B1: 'Q'},{ Dimension_ID: 3,B1: 'Q'},];
params['filterValues'] = { A1: [ 'N', 'P' ],B1: [ 'Q' ] };
let res = data.reduce((a, c) => {
return Object.entries(params['filterValues']).reduce((a,[k, arr]) => {
a[k] = a[k] || {}
return arr.reduce((a,v) => {
const o = a[k][v] = a[k][v] || [];
c[k] && c[k] === v && o.push(c.Dimension_ID)
return a
},a);
},a);
}, {});
console.log(res)