-2

我正在以这样的对象数组的形式获取数据......

 let array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
              {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];

我想要这种形式的这个数组,请任何人帮助...

 let arrayIWant = [
                    { 
                      2:[{serviceId:2,name:'ahsan'},{serviceId:2,name:'john'}], 
                      5:[{serviceId:5,name:'majeed'},{serviceId:5,name:'ziyad'}]
                    } 
                  ] 

请帮忙

4

4 回答 4

0
  1. 遍历数组中的所有项目。
  2. 对于每个项目:
    • 如果serviceId不作为对象的道具存在,则将道具的serviceId键设置为包含该项目的数组。
    • 如果存在,则将该项目添加到该数组中。
于 2020-02-18T09:22:05.170 回答
0

您可以尝试这样来获得预期的结果

    const array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
                  {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];
    const iteratedArray = array.reduce((acc,val) => {
      const key = val.serviceId;
       if (!acc[key]) acc[key] = [];
       acc[key].push(val);
       return acc; 
    },{});
    const arrayIWant = [iteratedArray];
    console.log(arrayIWant);

于 2020-02-18T09:25:03.943 回答
0

据我了解,您希望将对象数组按serviceId. 为此,您可以使用 lodash https://lodash.com/docs/#groupBy中的 groupBy 方法

或者像这样编写自己的实现:

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};

var data = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
          {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];
console.log(groupBy(data, 'serviceId'));

我希望这会对你有所帮助。

于 2020-02-18T09:25:33.553 回答
0

您可以使用 lodash 库的 _.keyBy 方法

_.keyBy(array, 'serviceId');

const _ = require('lodash')
let array = [{serviceId:2,name:'ahsan'}, {serviceId:5,name:'majeed'}, 
              {serviceId:2,name:'john'}, {serviceId:5,name:'ziyad'}];

result = _.keyBy(array, 'serviceId');

console.log([result])

看一下这个。它应该会给你想要的结果。

于 2020-02-18T09:27:33.563 回答