将2d表格数据条目转换为JavaScript中的对象数组

时间:2017-04-16 16:24:48

标签: javascript arrays object

我有一个JS数组:

var newArr = [{"name":"Ashley", "2017-01-10":80, "2017-02-10":75, "2017-03-10":85},
              {"name":"Clara", "2017-01-10":90, "2017-02-10":82}];

并希望使用嵌套对象创建一个新数组。我们的想法是在新对象中使用名称,句点和分数。它应该是这样的:

.content {
  position: relative;
}

#collapseExample {
  position: absolute;
  z-index: 1;
}

2 个答案:

答案 0 :(得分:0)

您可以使用Array#reduce并使用普通JS对象作为地图,以便在迭代array时按其关联的人名临时存储对象:



var array = [
  ["Ashley", "2017-01-10", 80],
  ["Ashley", "2017-02-10", 75],
  ["Ashley", "2017-03-10", 85],
  ["Clara", "2017-01-10", 90],
  ["Clara", "2017-02-10", 82]
]

var result = []
array.reduce(function(map, e) {
  map[e[0]] || result.push(map[e[0]] = { name: e[0] })
  map[e[0]][e[1]] = e[2]
  return map
}, {})

console.log(result)

.as-console-wrapper { min-height: 100%; }




答案 1 :(得分:0)

您可以使用哈希表作为名称,并使用它收集其他数据。



var array = [["Ashley", "2017-01-10", 80], ["Ashley", "2017-02-10", 75], ["Ashley", "2017-03-10", 85], ["Clara", "2017-01-10", 90], ["Clara", "2017-02-10", 82]],
    grouped = array.reduce(function (hash) {
        return function (r, a) {
            if (!hash[a[0]]) {
                hash[a[0]] = { name: a[0] };
                r.push(hash[a[0]]);
            }
            hash[a[0]][a[1]] = a[2];
            return r;
        };
    }(Object.create(null)), []);

console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }