【问题标题】:underscore js mapping array of objects multiple properties to new array下划线 js 将对象数组的多个属性映射到新数组
【发布时间】:2016-07-22 17:31:21
【问题描述】:

var items = [{
  //other properties... above
  item_name: [
    [1],
    [2, 3]
  ],
  item_description: [
    [1],
    [3, 4]
  ],
  item_quantity: [
    [1],
    [4, 5]
  ],
  item_value: null,
}, {
  //other properties... above
  item_name: 1,
  item_description: 2,
  item_quantity: 3,
  item_value: 4,
}, {
  //other properties... above
  item_name: [1, 2, 3],
  item_description: [1, 2, 3],
  item_quantity: [1, 2, 3],
  item_value: [1, 2, 3],
}];

var itemList = [];



items.forEach(function(item) {

  if (!_.isArray(item.item_name)) {
    itemList.push({
      name: item.item_name,
      description: item.item_description,
      quantity: item.item_quantity,
      value: item.item_value
    });
  }

  var names = item.item_name ? _.flatten(item.item_name) : [];
  var descriptions = item.item_description ? _.flatten(item.item_description) : [];
  var quantity = item.item_quantity ? _.flatten(item.item_quantity) : [];
  var values = item.item_value ? _.flatten(item.item_value) : [];

  names.forEach(function(name, index) {
    itemList.push({
      name: names[index],
      description: descriptions[index],
      quantity: quantity[index],
      values: values[index]
    });
  })
  

});
console.log(itemList);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.1/underscore-min.js"></script>

有没有一种方法可以让我在下划线中更快地执行此操作,以删除所有扁平化?

对于我正在使用的数组中的每个项目

item_name[i]
item_description[i]
item_quantity[i]
item_value[i]

并将它们添加到 itemList

item中的item属性可以是[[],[]]或者[]或者整数或者null

目前它正在输出预期的内容(除非名称为空并且它可以跳过项目)但是我不喜欢它正在执行的所有循环并且我想知道我是否可以更好地利用下划线库

【问题讨论】:

    标签: javascript arrays object underscore.js


    【解决方案1】:

    你可以用这个:

    var myKeys = ['name', 'description', 'quantity', 'value'];
    var result = _.flatten(items.map(function(item) {
        return _.zip.apply(_, myKeys.map(function(key) {
            return _.flatten([item['item_'+key]]);
        })).map(function(arr) {
            return _.object(myKeys, arr);
        });
    }));
    

    演示:

    var items = [{
        //other properties... above
        item_name: [
            [1],
            [2, 3]
        ],
        item_description: [
            [1],
            [3, 4]
        ],
        item_quantity: [
            [1],
            [4, 5]
        ],
        item_value: null,
    }, {
        //other properties... above
        item_name: 1,
        item_description: 2,
        item_quantity: 3,
        item_value: 4,
    }, {
        //other properties... above
        item_name: [1, 2, 3],
        item_description: [1, 2, 3],
        item_quantity: [1, 2, 3],
        item_value: [1, 2, 3],
    }];
    var myKeys = ['name', 'description', 'quantity', 'value'];
    var result = _.flatten(items.map(function(item) {
        return _.zip.apply(_, myKeys.map(function(key) {
            return _.flatten([item['item_'+key]]);
        })).map(function(arr) {
        	return _.object(myKeys, arr);
        });
    }));
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.1/underscore-min.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2020-02-10
      • 2012-01-23
      • 1970-01-01
      相关资源
      最近更新 更多