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,但运气不太好。如果你能告诉我最好的方法,你能告诉我你试过什么吗?如果我们知道你被困在哪里,我们会更容易帮助你。你需要将它简化为一个对象,以名称作为键作为值,然后映射键以生成嵌套数组。谢谢。你是明星:)谢谢。你是明星:)