Javascript过滤数组到新数组中
所以我有这些数据:Javascript过滤数组到新数组中,javascript,arrays,Javascript,Arrays,所以我有这些数据: const data = [ { product_name: 'BMW', year: '1982' }, { product_name: 'BMW', year: '1998' }, { product_name: 'LandRover', year: '1982' }, { product_name: 'BMW', year: '1982' }, { produ
const data = [
{
product_name: 'BMW',
year: '1982'
},
{
product_name: 'BMW',
year: '1998'
},
{
product_name: 'LandRover',
year: '1982'
},
{
product_name: 'BMW',
year: '1982'
},
{
product_name: 'LandRover',
year: '1985'
},
{
product_name: 'LandRover',
year: '1981'
}
]
使用vanilla javascript,我需要将数据过滤到如下数组中:
[
{
name: 'BMW',
data: [1982, 1998, 1982]
},
{
name: 'LandRover',
data: [1982, 1985, 1981]
}
]
有人能帮忙吗?我不知道最好的方法是什么
非常感谢您可以将数据存储到,获取,然后将其存储到阵列:
const data=[{“产品名称”:“宝马”,“年份”:“1982”},{“产品名称”:“宝马”,“年份”:“1998”},{“产品名称”:“路虎”,“年份”:“1982”},{“产品名称”:“宝马”,“年份”:“1982”},{“产品名称”:“路虎”,“年份”:“1985”},{“产品名称”:“路虎”,“年份”:“1981”};
const result=[…data.reduce((m,o)=>{
//如果map没有product_名称,则初始化对象并添加到map
m、 具有(o.product_name)| m.set(o.product_name){
名称:o.产品名称,
数据:[]
});
//获取产品对象,并添加年份
m、 get(o.product_name).data.push(o.year);
返回m;
},新映射())。值()];//获取贴图值,并扩散到数组中
控制台日志(结果)代码>您可以将数据发送到,获取,然后将其发送到数组:
const data=[{“产品名称”:“宝马”,“年份”:“1982”},{“产品名称”:“宝马”,“年份”:“1998”},{“产品名称”:“路虎”,“年份”:“1982”},{“产品名称”:“宝马”,“年份”:“1982”},{“产品名称”:“路虎”,“年份”:“1985”},{“产品名称”:“路虎”,“年份”:“1981”};
const result=[…data.reduce((m,o)=>{
//如果map没有product_名称,则初始化对象并添加到map
m、 具有(o.product_name)| m.set(o.product_name){
名称:o.产品名称,
数据:[]
});
//获取产品对象,并添加年份
m、 get(o.product_name).data.push(o.year);
返回m;
},新映射())。值()];//获取贴图值,并扩散到数组中
控制台日志(结果)代码>使用reduce
var output = Object.values(data.reduce( function( a,b ){
a[ b.product_name ] = a[ b.product_name ] || { name : b.product_name, data: [] }; //initialize the object as { name : .., data: [] };
a[ b.product_name ].data.push( Number( b.year ) ); //push the year to data array after converting the same to a Number
return a; //return the accumulator
}, {})); //finally return the object.values
演示
var数据=[
{
产品名称:“宝马”,
年份:“1982”
},
{
产品名称:“宝马”,
年份:“1998”
},
{
产品名称:“路虎”,
年份:“1982”
},
{
产品名称:“宝马”,
年份:“1982”
},
{
产品名称:“路虎”,
年份:1985年
},
{
产品名称:“路虎”,
年份:“1981”
}
];
var输出=Object.values(data.reduce(函数a,b){
a[b.产品名称]=a[b.产品名称]|{
名称:b.产品名称,
数据:[]
};//将对象初始化为{name:..,data:[]};
a[b.product_name].data.push(Number(b.year));//将年份转换为数字后,将年份推送到数据数组中
返回一个;//返回累加器
}, {}));
控制台日志(输出)代码>使用reduce
var output = Object.values(data.reduce( function( a,b ){
a[ b.product_name ] = a[ b.product_name ] || { name : b.product_name, data: [] }; //initialize the object as { name : .., data: [] };
a[ b.product_name ].data.push( Number( b.year ) ); //push the year to data array after converting the same to a Number
return a; //return the accumulator
}, {})); //finally return the object.values
演示
var数据=[
{
产品名称:“宝马”,
年份:“1982”
},
{
产品名称:“宝马”,
年份:“1998”
},
{
产品名称:“路虎”,
年份:“1982”
},
{
产品名称:“宝马”,
年份:“1982”
},
{
产品名称:“路虎”,
年份:1985年
},
{
产品名称:“路虎”,
年份:“1981”
}
];
var输出=Object.values(data.reduce(函数a,b){
a[b.产品名称]=a[b.产品名称]|{
名称:b.产品名称,
数据:[]
};//将对象初始化为{name:..,data:[]};
a[b.product_name].data.push(Number(b.year));//将年份转换为数字后,将年份推送到数据数组中
返回一个;//返回累加器
}, {}));
控制台日志(输出)代码>使用带有哈希映射的方法来引用索引
// object for refering index
const ref = {};
// iterate over the object array
let res = data.reduce((arr, o) => {
// check already present in array
if (!(o.product_name in ref)) {
// if not present define the index reference
// and define object
arr[ref[o.product_name] = arr.length] = {
name: o.product_name,
data: []
};
}
// push into the data array
arr[ref[o.product_name]].data.push(o.year);
// return array reference
return arr;
// set initial value as array
}, [])
const data=[{产品名称:'BMW',年份:'1982'},{产品名称:'BMW',年份:'1998'},{产品名称:'LandRover',年份:'1982'},{产品名称:'BMW',年份:'LandRover',年份:'1985'},{产品名称:'LandRover',年份:'1981'};
常数ref={};
让res=data.reduce((arr,o)=>{
如果(!(o.product_name in ref))arr[ref[o.product_name]=arr.length]={name:o.product_name,数据:[]};
arr[ref[o.product_name].数据推送(o.year);
返回arr;
}, [])
控制台日志(res)代码>使用带有哈希映射的方法来引用索引
// object for refering index
const ref = {};
// iterate over the object array
let res = data.reduce((arr, o) => {
// check already present in array
if (!(o.product_name in ref)) {
// if not present define the index reference
// and define object
arr[ref[o.product_name] = arr.length] = {
name: o.product_name,
data: []
};
}
// push into the data array
arr[ref[o.product_name]].data.push(o.year);
// return array reference
return arr;
// set initial value as array
}, [])
const data=[{产品名称:'BMW',年份:'1982'},{产品名称:'BMW',年份:'1998'},{产品名称:'LandRover',年份:'1982'},{产品名称:'BMW',年份:'LandRover',年份:'1985'},{产品名称:'LandRover',年份:'1981'};
常数ref={};
让res=data.reduce((arr,o)=>{
如果(!(o.product_name in ref))arr[ref[o.product_name]=arr.length]={name:o.product_name,数据:[]};
arr[ref[o.product_name].数据推送(o.year);
返回arr;
}, [])
控制台日志(res)代码>您可以尝试此功能
function convert(datas) {
var hash_result = {}
datas.forEach(function(data) {
console.log(hash_result[data['product_name']])
if(hash_result[data['product_name']]) {
hash_result[data['product_name']].push(data['year'])
} else {
hash_result[data['product_name']] = [data['year']]
}
})
var result = []
Object.keys(hash_result).forEach(function(key) {
result.push({
name: key,
data: hash_result[key]
})
})
return result
}
你可以试试这个功能
function convert(datas) {
var hash_result = {}
datas.forEach(function(data) {
console.log(hash_result[data['product_name']])
if(hash_result[data['product_name']]) {
hash_result[data['product_name']].push(data['year'])
} else {
hash_result[data['product_name']] = [data['year']]
}
})
var result = []
Object.keys(hash_result).forEach(function(key) {
result.push({
name: key,
data: hash_result[key]
})
})
return result
}
你可以看看这里:我尝试过使用地图,但运气不太好。如果你能告诉我最好的方法,你能告诉我你试过什么吗?如果我们知道你被困在哪里,那么帮助会更容易。你需要将它简化为一个对象,以名称作为键作为值,然后映射到键上以生成嵌套数组。你可以看看这里:我尝试过使用map,但运气不太好。如果你能告诉我最好的方法,你能告诉我你试过什么吗?如果我们知道你被困在哪里,我们会更容易帮助你。你需要将它简化为一个对象,以名称作为键作为值,然后映射键以生成嵌套数组。谢谢。你是明星:)谢谢。你是明星:)