【问题标题】:How to concat and find from json array in lodash?如何从 lodash 中的 json 数组中连接和查找?
【发布时间】:2019-08-17 12:20:33
【问题描述】:

我有一个要求,我需要将所有状态与每个区域连接起来,我在下面创建了一个示例:

但我不确定这是 lodash 中的最佳方式还是可以使用任何其他内置方法来更有效地创建。

var data = [ {
  "region": "South",
  "state": "Wyoming",
  "sales": 1803
}, {
  "region": "South",
  "state": "Idaho",
  "sales": 3380
}, {
  "region": "South",
  "state": "New Mexico",
  "sales": 2779
}, {
  "region": "South",
  "state": "Montana",
  "sales": 3589
}, {
  "region": "South",
  "state": "Utah",
  "sales": 11223
},  {
  "region": "South",
  "state": "Oregon",
  "sales": 17431
}, {
  "region": "South",
  "state": "Colorado",
  "sales": 72110
}, {
  "region": "South",
  "state": "Arizona",
  "sales": 45283
}, {
  "region": "South",
  "state": "Washington",
  "sales": 88656
}, {
  "region": "South",
  "state": "California",
  "sales": 55731
}, {
  "region": "West",
  "state": "Wyoming",
  "sales": 1603
}, {
  "region": "West",
  "state": "New Mexico",
  "sales": 4779
}, {
  "region": "West",
  "state": "Montana",
  "sales": 5589
}, {
  "region": "West",
  "state": "Utah",
  "sales": 11223
}, {
  "region": "West",
  "state": "Nevada",
  "sales": 16729
}, {
  "region": "West",
  "state": "Oregon",
  "sales": 17431
}, {
  "region": "West",
  "state": "Colorado",
  "sales": 32110
}, {
  "region": "West",
  "state": "Arizona",
  "sales": 35283
}, {
  "region": "West",
  "state": "Washington",
  "sales": 138656
}, {
  "region": "West",
  "state": "California",
  "sales": 457731
} ];
var cat = [];
_.forEach(_.uniq(_.map(data, 'region')), function(o){
_.forEach(_.uniq(_.map(data, 'state')), function(l) {
const fin = _.find(data, function(f) { return f.state == l && f.region == o; });

if (_.isUndefined(fin)) {
cat.push({'state': o + " - " + l, 'region': o, 'sales': 0});
} else {
cat.push({'state': o + " - " + l, 'region': o, 'sales': fin.sales});
}

});
});
console.log(cat);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

我之所以使用这个,是因为在上述数据中,南部地区似乎缺少某些州,而西部地区似乎缺少一些州。 但就我而言,我希望两个区域的状态数据相等,我使用了 lodash 函数,但我不确定这是否是最好的方法。

【问题讨论】:

    标签: javascript jquery lodash


    【解决方案1】:

    这是非常基本的 JavaScript,不需要 Lodash 或 jQuery。

    您可以更新现有数组:

    var data=[{"region":"South","state":"Wyoming","sales":1803},{"region":"South","state":"Idaho","sales":3380},{"region":"South","state":"New Mexico","sales":2779},{"region":"South","state":"Montana","sales":3589},{"region":"South","state":"Utah","sales":11223},{"region":"South","state":"Oregon","sales":17431},{"region":"South","state":"Colorado","sales":72110},{"region":"South","state":"Arizona","sales":45283},{"region":"South","state":"Washington","sales":88656},{"region":"South","state":"California","sales":55731},{"region":"West","state":"Wyoming","sales":1603},{"region":"West","state":"New Mexico","sales":4779},{"region":"West","state":"Montana","sales":5589},{"region":"West","state":"Utah","sales":11223},{"region":"West","state":"Nevada","sales":16729},{"region":"West","state":"Oregon","sales":17431},{"region":"West","state":"Colorado","sales":32110},{"region":"West","state":"Arizona","sales":35283},{"region":"West","state":"Washington","sales":138656},{"region":"West","state":"California","sales":457731}];
    
    for (let d of data) {
      d.state = `${d.region} - ${d.state}`;
    }
    
    console.log(data);

    或者你可以创建一个新数组:

    var data=[{"region":"South","state":"Wyoming","sales":1803},{"region":"South","state":"Idaho","sales":3380},{"region":"South","state":"New Mexico","sales":2779},{"region":"South","state":"Montana","sales":3589},{"region":"South","state":"Utah","sales":11223},{"region":"South","state":"Oregon","sales":17431},{"region":"South","state":"Colorado","sales":72110},{"region":"South","state":"Arizona","sales":45283},{"region":"South","state":"Washington","sales":88656},{"region":"South","state":"California","sales":55731},{"region":"West","state":"Wyoming","sales":1603},{"region":"West","state":"New Mexico","sales":4779},{"region":"West","state":"Montana","sales":5589},{"region":"West","state":"Utah","sales":11223},{"region":"West","state":"Nevada","sales":16729},{"region":"West","state":"Oregon","sales":17431},{"region":"West","state":"Colorado","sales":32110},{"region":"West","state":"Arizona","sales":35283},{"region":"West","state":"Washington","sales":138656},{"region":"West","state":"California","sales":457731}];
    
    var newData = data.map(d => ({...d, state: `${d.region} - ${d.state}`}));
    
    console.log(newData);

    参考资料:

    【讨论】:

      【解决方案2】:

      你可以通过一个for循环来实现

      const array = [{
        region: 'South',
        state: 'Wyoming',
        sales: 1803,
      }, {
        region: 'South',
        state: 'Idaho',
        sales: 3380,
      }, {
        region: 'South',
        state: 'New Mexico',
        sales: 2779,
      }, {
        region: 'South',
        state: 'Montana',
        sales: 3589,
      }, {
        region: 'South',
        state: 'Utah',
        sales: 11223,
      }, {
        region: 'South',
        state: 'Oregon',
        sales: 17431,
      }, {
        region: 'South',
        state: 'Colorado',
        sales: 72110,
      }, {
        region: 'South',
        state: 'Arizona',
        sales: 45283,
      }, {
        region: 'South',
        state: 'Washington',
        sales: 88656,
      }, {
        region: 'South',
        state: 'California',
        sales: 55731,
      }, {
        region: 'West',
        state: 'Wyoming',
        sales: 1603,
      }, {
        region: 'West',
        state: 'New Mexico',
        sales: 4779,
      }, {
        region: 'West',
        state: 'Montana',
        sales: 5589,
      }, {
        region: 'West',
        state: 'Utah',
        sales: 11223,
      }, {
        region: 'West',
        state: 'Nevada',
        sales: 16729,
      }, {
        region: 'West',
        state: 'Oregon',
        sales: 17431,
      }, {
        region: 'West',
        state: 'Colorado',
        sales: 32110,
      }, {
        region: 'West',
        state: 'Arizona',
        sales: 35283,
      }, {
        region: 'West',
        state: 'Washington',
        sales: 138656,
      }, {
        region: 'West',
        state: 'California',
        sales: 457731,
      }];
      
      
      const customResult = [];
      for (let i = 0; i < array.length; i += 1) {
        const element = array[i];
        const result = { ...element };
        result.state = `${element.region} - ${element.state}`;
        customResult.push(result);
      }
      console.log(customResult);

      【讨论】:

        【解决方案3】:

        如果您想改变现有数组,请使用另一个答案中的循环。如果您希望返回一组新的更新对象,您可以使用map

        const data = [{
          "region": "South",
          "state": "Wyoming",
          "sales": 1803
        }, {
          "region": "South",
          "state": "Idaho",
          "sales": 3380
        }];
        
        const out  = data.map(obj => {
        
          // Destructure the various props from each object
          const { region, state, sales } = obj;
        
          // Create the new state value
          const newState = `${region} - ${state}`;
        
          // Return each updated object
          return { state: newState, region, sales };
        });
        
        console.log(out);

        更多文档

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-02
          相关资源
          最近更新 更多