将值添加到对象数组中

时间:2016-05-27 19:03:34

标签: javascript arrays loops object underscore.js

我有这个对象数组,我在UI表上显示。它有3列,名称,联系人和ID。

[Object, Object, Object]
0:Object
    name: "Rick"
    Contact: "Yes"
    id: 1
1:Object
    name:"Anjie"
    Contact:"No"
    id: 2
2:Object
    name:"dillan"
    Contact:"Maybe"
    id:3

现在,我在表格顶部添加一个新行。因此,新添加到对象数组中的行将如下所示。

[Object, Object, Object,Object]
0:Object  //newly added row. Since new row is added, it doesnt have any data.
 name: ""
 Contact: ""
 id: 
1:Object
 name: "Rick"
 Contact: "Yes"
 id: 1
2:Object
 name:"Anjie"
 Contact:"No"
 id: 2
3:Object
 name:"dillan"
 Contact:"Maybe"
 id:3

我希望对象数组看起来像这样而不是一个。

[Object, Object, Object,Object]
0:Object  //newly added row. Since new row is added, it doesnt have any data.
 name: ""
 Contact: ""
 id: 4        
1:Object
 name: "Rick"
 Contact: "Yes"
 id: 1
2:Object
 name:"Anjie"
 Contact:"No"
 id: 2
3:Object
 name:"dillan"
 Contact:"Maybe"
 id:3

唯一的变化是第0个对象的id值。您可以看到我将其输入为4.它将检查id对象数组中的最大值。在这种情况下,它是3.因此它将增加1并将其作为新添加的行的id值。

有人可以告诉我如何实现这一目标。

另外,我还有一个查询。

如果我的id值如下。

1
2
3
4
5
6

我删除了4和5.所以新行将是

1
2
5
6

这里,它将最大长度检查为4,并将id值5添加到新行。看起来有点像这样。

5
1
2
5
6

在这种情况下,重复5次。我不想要这个。我反而希望看到哪个是给id的最高值,然后根据它增加id。所以看起来应该是这样的。

7
1
2
5
6

3 个答案:

答案 0 :(得分:4)

如果我理解正确,您只想运行:

array[0].id = array.length;
添加行后立即

。或者,如果您可以在添加时控制表示新行的对象的值,则可以将该行添加为:

{
  name:"",
  Contact:"",
  id: array.length + 1
}

编辑:

响应您的编辑,显示可以删除数组的行。

在这种情况下,要获取ID值,您有许多选项。

一种是在删除时遍历数组的所有成员,并减少id大于已删除行的所有行的id。这可能是最好的解决方案。

示例代码:

var delete = function(array, idToDelete) {
  for(var i = 0; i < array.length; i += 1) {
    if(array[i].id === idToDelete) {
      array.splice(i, 1);
    } else if (array[i].id > idToDelete) {
      array[i].id = array[i].id - 1;
    }
  }
}

如果由于某种原因,这不是一个选项,我会建议迭代数组以找到其中的最高ID,并添加1.

var newId = array[0].id;
for(var i = 0; i < array.length; i += 1) {
  if(array[i].id > newId) {
    newId = array[i].id;
  } 
}
array.splice(0, 0, {name:"", Contact:"", id: newId + 1});

答案 1 :(得分:3)

您可以使用它来查找可用的下一个最高ID(假设它并非总是等于数组的长度):

var newID = 1 + myArray.reduce(function(p, c) {
    return Math.max(c.id, p);
}, 0);

其中myArray是您的数组。

在ES6中你可以使用:

var newID = 1 + myArray.reduce((p, c) => Math.max(c.id, p), 0)

答案 2 :(得分:-1)

如果您只关心ID是唯一的,则可以将时间戳添加为ID

让我们假设您的数组被称为peopleContact 在对象数组中添加项目的代码类似于以下内容。

var person= new Object();
person.name= "";
person.Contact= "";
person.id = Date.now();

peopleContact.push(person);