2017-03-10 7 views
4

私はオブジェクトの配列を持っています。次に、別のオブジェクトを追加して、それを既に配列に存在するものに貼り付けるとします。つまり、新しいオブジェクトのインデックスは、すでに存在しているオブジェクトに比べて1つ大きくなり、残りの要素のインデックスは1つ増分する必要があります。例えば配列のjavascriptの変更要素

  1. 私が持っている6つの要素の配列
  2. 私の新しいオブジェクトがインデックスを持つ存在していたオブジェクトに固執され
  3. = 2
  4. 新しいオブジェクトは、インデックス= 3およびすべてのオブジェクトの配列に入る インデックスは以前より大きくなっています2今すぐ1つ上の場所を取得

インデックスを2つに分割しようとしましたが、インデックスを2にして新しい要素をプッシュしてからもう一度コードを実行しますk。

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

そして、私はそれがこれを見えるようにそこに外部の要素を入れたい:

myArray = [ 
    {name: "not selected"}, 
    {name: "not selected"}, 
    {name: "selected"}, 
    {name: "new element"}, // inserted 
    {name: "not selected"},   
    {name: "not selected"}, 
    {name: "not selected"}, 
] 
+0

1既にインデックスされるアレイのインデックスの再作成を気にしないように見直し。 2.再索引JSONまたは再索引オブジェクト配列のgoogle/SOを検索します。3.まだ問題がある場合は、スニペットエディタを使用して[mcve]を表示します。 PS:実際に配列を持っている場合は、カウンタやループの代わりにforeachを使用してください。データを投稿したら、より良い提案を与えることができました – mplungjan

+0

サンプルデータと必要な結果を追加してください。 –

+0

私の要素は実際にはかなり大きなjson構造なので、ここに投稿するのは無意味です。しかし、私はポストを基本的な例で更新しました。どのように見え、どのように変更したいのですか? – andrzej541

答えて

4

私はこのようになります配列を持つ他の言葉で

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); 
    } 
} 

私があなたのことを正しく理解していれば、要素を配列に挿入して移動する方法に問題があります。

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);

+1

これは事前にインデックスを知っていることを前提としています(公平な前提です)。しかし、未来の訪問者にとっては、['[。] .findIndex()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex ) –

+0

これで正常に動作しています。ありがとう! – andrzej541

2

あなたはArray#spliceを使用して取ることができる:

ここ

は、あなたがあなたの例のために必要なものです:あなたが挿入するように要素のためのオプションのパラメータを持つスプライス方法、でそれを行うことができます要素が配列に挿入された後のindex

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題