2017-11-21 21 views
0

新しい配列を既存の配列に追加したい。ここjavascript新しい配列を既存の配列にマップして新しいプロパティを追加する

var input1 = [ { name: 'one' }, { name: 'two' }, { name: 'three' } ]; 
var input2 = [ { age: '1' }, { age: '2' }, { age: '3' } ]; 
result = [ { name: 'one', age: '1' }, { name: 'two', age: '2' }, { name: 'three', name: 'three' } ]; 

は私の試みですが、それが動作していません。

var original = "one,two,three"; 

var myarray = [{ age: '1' }, { age: '2' }, { age: '3' }]; 
// this myarray could ALSO be an empty [] array. 
myarray += original.split(',').map(s => ({name: s})); 
console.log(myarray) 

この結果を達成するために助けてください。ありがとう (これは重複した質問ではなく、配列の1つの長さの可能な差異を扱っています)。

+0

2つの配列を_add_するだけでは、オブジェクトのプロパティをマージすることはできません。 – Xufox

+0

@Xufoxは同じ数の要素を持っていると仮定します。 – moaningalways

+0

ヒント:1つ上のループ...インデックスを使用して同じ位置にある他のものを変更する – charlietfl

答えて

1

2つの入力配列が異なるサイズのケースを処理する必要がある場合は、最大長を繰り返し処理し、2つの入力オブジェクトの連結を配列に出力する必要があります。ここではそれを行うことができる方法の例です:

var input1 = [ { name: 'one' }, { name: 'two' }, { name: 'three' } ]; 
 
var input2 = [ { age: '1' }, { age: '2' }, { age: '3' } ]; 
 
var output = []; 
 

 
var maxLength = Math.max(input1.length, input2.length); 
 
for (var i = 0; i < maxLength; i++) { 
 
    // here we create a new object which is a combination 
 
    // of the item from both input arrays and add it to output 
 
    output.push(Object.assign({}, input1[i], input2[i])); 
 
} 
 

 
console.log(output);

出力配列は、最長の入力配列の長さになります。

+0

OPが開始された場合、これを複雑にします。文字列で – charlietfl

+2

@charlietflあなたはただトローリングですか?もしあなたがいないのであれば、入力配列がどのように複雑になっているかを示す異なる長さの場合を扱うことができる、あるいは少なくとも少なくとも代替的な解答があります。 – caesay

0

次の2つの配列内の同じインデックスにあるオブジェクトをマージして、あなたがこのような何か行うことができます新しい配列を返すにしたい場合は、次の作業スニペットと

result = input1.map((obj, index) => ({ 
    ...obj, 
    ...input2[index] 
})) 

編集:

const input1 = [ { name: 'one' }, { name: 'two' }, { name: 'three' } ]; 
 
const input2 = [ { age: '1' }, { age: '2' }, { age: '3' } ]; 
 

 
function mergeObjectsInArray(arr1, arr2) { 
 
    return arr1.map((obj, index) => ({ 
 
     ...obj, 
 
     ...arr2[index] 
 
    })); 
 
} 
 

 
console.log(mergeObjectsInArray(input1, input2))

+0

あなたはこれの実例を与えることができます。歓声 – moaningalways

+0

オブジェクトスプレッドシンタックスは公式のES構文ではないことに注意してください。それは、次のES版の第3段階の提案です。 – Xufox

+0

TS、Babelなどのコンパイラを使用している場合はこれで問題ありませんが、ネイティブのjavascriptを使用している場合は、下の私の答えのように 'Object.assign()'を使用する必要があります。また、これは、配列が私のように異なる長さの場合も処理しません。 – caesay

0

両方の配列が同じ長さを持っている場合、次のことができますループトンオブジェクトのマージにObject.assign()を使用することができます。たとえば、

var input1 = [ { name: 'one' }, { name: 'two' }, { name: 'three' } ]; 
    var input2 = [ { age: '1' }, { age: '2' }, { age: '3' } ]; 

    var x = []; 

    for (i in input1) { 
     x[i] = Object.assign(input1[i], input2[i]) 
    } 

変数xは、あなたが望む値を保持します。

+0

なぜdownvote?この答えに何が間違っていますか?このコードは機能し、このソリューションの背後にあるアイデアについて説明しました。 – user3362334

+0

私はなぜ私の答えが現在+ 4/-4であると尋ねることができ、受け入れられた答えです。この質問は、何らかの理由で超毒性です。 -3と-4には削除された回答もいくつかあります – caesay

関連する問題