操纵数组中的对象

时间:2017-07-03 12:00:55

标签: javascript

我是JavaScript的新手,并且一直在努力将对象组合在同一个数组中。 这就是我所拥有的:

var testList = [{
  'taskList1': 'task1 for taskList1',
},
{
  'taskList1': 'task2 for taskList1',
},
{ 
  'taskList2': 'task1 for taskList2'
},
{
  'taskList2': 'task2 for taskList2'
}]

以下数组是我真正希望从上面得到的:

var testList = [{
  'taskList1': 'task1 for taskList1',
  'taskList2': 'task1 for taskList2'
},
{
  'taskList1': 'task2 for taskList1',
  'taskList2': 'task2 for taskList2'
}]

有人可以帮助我将当前阵列转换为上面的阵列吗? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

在这种情况下,您的数据结构效率很低。我建议通过使用相同的对象数组来使其更好,但每个对象应包含itemNamebelongsTo作为对任何集合的引用(在您的情况下 - {{1}你可以通过那里。

这是Codepen上更灵活的数据结构解决您的问题的方法 - https://codepen.io/Inlesco/pen/dReYgd

我还在下面的Codepen中添加了重组后的任务列表作为例子。

taskList

有很多方法可以解决这个问题。我刚刚添加了最简单的一个。

答案 1 :(得分:1)

您可以使用for语句在一个对象中重新组合具有相同taskList ID的对象。 当然,您需要为此使用正确的条件。 但最好的方法是@Denialos说,修改你的数据结构。

答案 2 :(得分:1)

根据我上面对该问题的评论,您所需的数据结构似乎已被颠倒,或者在内部"内部"。给定一个项目列表,以及每个项目的一组任务,我希望外部元素是列表,内部元素是任务集。

鉴于此,给定您的(当前)输入数据我会使用:

function restructure(taskList) {
    var result = {};

    for (var i = 0, n = taskList.length; i < n; ++i) {

        // read current item
        var item = taskList[i];
        var key = Object.keys(item)[0];
        var value = item[key];

        // update the output
        result[key] = result[key] || [];
        result[key].push(value);
    }

    return result;
}

结果输出:

{
    taskList1: [ 'task1 for taskList1', 'task2 for taskList1' ],
    taskList2: [ 'task1 for taskList2', 'task2 for taskList2' ]
}

也就是说,您的输入数据模型也有些格式错误,每个数组元素都有一个未知密钥。您应该查看实际生成该数据的内容,并在可能的情况下解决该问题。