javascript更改数组中的元素

and*_*541 6 javascript arrays algorithm

我有一个对象数组.然后我想添加另一个对象并将其粘贴到我的数组中已经存在的对象中.这意味着新对象的索引应该比我已经存在的对象大1,并且元素索引的其余部分应该加1.

例如:

  1. 我有6个元素的数组
  2. 我的新对象坚持索引= 2的现有对象
  3. 新对象进入一个索引= 3的数组,所有索引先前大于2的对象现在得到一个更高的位置

我试图将我的数组拆分为两个从index = 2开始,推送我的新元素,然后再次加入,但我的代码不能正常工作.

for (var i in myArray) {
  if (myArray[i].name === inheritedRate.inherit) {
    var tempArr = [];
    for (var n = i; n < myArray.length; n++) {
      tempArr.push($scope.myArray[n]);
      myArray.splice(n, 1);
    }
    myArray.push(inheritedRate);
    myArray.concat(tempArr);
  }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我有一个看起来像这样的数组:

myArray = [
  {name: "not selected"},
  {name: "not selected"},
  {name: "selected"},
  {name: "not selected"},
  {name: "not selected"},
  {name: "not selected"},
]
Run Code Online (Sandbox Code Playgroud)

我想在那里放一个外部元素来使它看起来像这样:

myArray = [
  {name: "not selected"},
  {name: "not selected"},
  {name: "selected"},
  {name: "new element"}, // inserted
  {name: "not selected"},          
  {name: "not selected"},
  {name: "not selected"},
]
Run Code Online (Sandbox Code Playgroud)

Geo*_*rgy 6

如果我理解正确,那么您遇到的问题是如何在数组中插入和移动元素。您可以使用splice方法执行此操作,该方法具有用于插入元素的可选参数:

这是您需要的示例:

var myArray = [
  {name: "not selected"}, 
  {name: "not selected"},
  {name: "selected"}, 
  {name: "not selected"},
  {name: "not selected"}, 
  {name: "not selected"}
];

myArray.splice(3, 0, {
  name: "new element"
});
console.log(myArray);
Run Code Online (Sandbox Code Playgroud)

  • 这是假设您事先知道索引(这是一个合理的假设)。然而,对于未来不这样做的访问者,有 [`[].findIndex()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex ) (2认同)

Nin*_*olz 5

您可以Array#splice在将元素插入数组后使用并获取索引。

var array = [{ name: "not selected" }, { name: "not selected" }, { name: "selected" }, { name: "not selected" }, { name: "not selected" }, { name: "not selected" }],
    index = 2,
    item = { name: "new element" };

array.splice(index + 1, 0, item);

console.log(array);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)