需要基于数组的元素创建对象的浅数组,数组的元素是对象的值:
var obj = {
  a: 1,
  b: 'x',
  c: 'z',
  d: ['rr', 'qq']
};
var rec = [];
obj.d.forEach(function(e, i) {
  rec.push({
    d: e
  })
});
console.log(rec);但当然这只会让我
[ { d: 'rr' }, { d: 'qq' } ]如何在新的对象数组中实现这一点?-->
[ { a: 1,
    b: 'x',
    c: 'z',
    d: 'rr' }, 
  { a: 1,
    b: 'x',
    c: 'z',
    d: 'qq' } ]发布于 2016-08-19 04:57:22
获得所需结果的最简单方法是使用map函数(它使用给定的映射函数将一个数组的元素映射到一个新数组)。然后,您可以使用来自原始对象的a、b和c以及来自映射函数参数的d来创建新对象:
var rec = obj.d.map(function(r) {
  return { 
    a: obj.a, 
    b: obj.b, 
    c: obj.c, 
    d: r 
  };
});发布于 2016-08-19 04:57:22
obj.d.forEach(function(e) {
    var item = {};
    Object.keys(obj).forEach(function(key) {
        item[key] = obj[key];
    });
    item.d = e;
    rec.push(item);
});但是属性a,b,c不能是对象。否则,rec数组中的每一项都将具有相同的引用。
发布于 2016-08-20 12:00:36
或者,这是可行的,但它相当丑陋:
var o = {
  a: 1,
  b: 'x',
  c: 'z',
  d: ['rr', 'qq']
};
var arr = [];
Object.keys(o).forEach(function(k) {
    var val = o[k];
    if (Array.isArray(val)) {
        val.forEach(function(j) {
        arr.push({[k] : j});
        });
    }
});
arr.forEach(function(obj) {
    for (var p in o) {
        var val = o[p];
        if (!Array.isArray(val)) {
        obj[p] = val
        }
    }
});
console.log(arr);https://stackoverflow.com/questions/39027359
复制相似问题