【问题标题】:how I make object value as key of another object of array?如何将对象值作为另一个数组对象的键?
【发布时间】:2020-02-18 09:13:24
【问题描述】:

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

 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'}]
                    } 
                  ] 

请帮忙

【问题讨论】:

  • 你能发布你的方法(代码)吗?
  • @Ele 我正在从 firebase 实时数据库中获取数据,并将它们推送到数组中,就像第一个数组一样。现在我想创建一个新数组,它有一个对象,并且在该对象内部,我们将那些具有相同 serviceId 的对象分开,并将 serviceId 值作为该对象的键,并将该键中的相同 serviceId 对象作为数组推送,就像在第二个代码 sn 中一样-p
  • 我们了解您想要什么,但是,我们需要您付出一点努力。
  • @Ele 我能做什么?
  • 简单地说,我们不是为人们编码,我们帮助人们解决他们自己代码中的问题。

标签: javascript arrays reactjs object


【解决方案1】:

你可以这样尝试得到你想要的结果

    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);

【讨论】:

    【解决方案2】:
    1. 遍历数组中的所有项。
    2. 对于每个项目:
      • 如果 serviceId 不作为对象的 prop 存在,请将 prop 的 serviceId 键设置为包含该项目的数组。
      • 如果存在,请将该项添加到该数组中。

    【讨论】:

    • 您好,先生,您能否分享一下代码 sn-p,因为我是 javascript 新手
    【解决方案3】:

    据我了解,您希望按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'));

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      你可以使用 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-11-30
        • 2022-12-10
        • 1970-01-01
        • 2020-09-17
        • 2017-07-17
        • 1970-01-01
        • 2022-01-25
        • 2021-12-25
        • 2018-12-01
        相关资源
        最近更新 更多