2016-05-03 18 views
0

配列から新しいオブジェクトを作成します。私はこのオブジェクトを持っているjavascriptの

var obj = { 
    name : 'Allen', 
    last : 'Jones', 
    age : 24, 
    city : 'London' 
} 

と、この配列:['name', 'age', 'city']

その選択したフィールドからオブジェクトを作成するための最も効率的な方法は何ですか?以下のように、最初のプロパティを削除することなく?

obj2 = {name: 'allen', age: 24, city: 'London'} 
+0

[ 'Array.prototype.reduce()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ Reduce) – Andreas

+0

'Array#reduce'を使用して、https://jsfiddle.net/rayon_1990/qx1mz2dp/ – Rayon

答えて

1

今obj2のが唯一の選択したプロパティに

3

を持っている必要があり、この単純なループ

var obj = { 
    name : 'Allen', 
    last : 'Jones', 
    age : 24, 
    city : 'London' 
}; 
var obj2 = {}; 
var arr = ['name','age','city']; 
arr.forEach(function(val){ 
    obj2[val] = obj[val]; 
}); 

を試してみてください、私はArray#forEach()を使用して、新しいオブジェクトのために与えられたキーを反復処理することをお勧めします。

var obj = { name: 'Allen', last: 'Jones', age: 24, city: 'London' }, 
 
    array = ['name', 'age', 'city'], 
 
    obj2 = {}; 
 

 
array.forEach(function (a) { 
 
    obj2[a] = obj[a]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(obj2, 0, 4) + '</pre>');

0

あなたは、各プロパティを反復処理するループを使用することができます。ループの場合、ループやforeachループの場合など、多くのアプローチがあります。ここではループのための単純なを使用して、一つだ:

var obj = { 
    name: 'Allen', 
    last: 'Jones', 
    age: 24, 
    city: 'London' 
}; 

var arr = ['name', 'age', 'city']; 
var obj2 = {}; 

for (var i = 0; i < arr.length; i++) { 
    var property = arr[i]; 
    obj2[property] = obj[property]; 
} 

ライブの例では、hereを見ることができます。

0

既存のオブジェクトから「最後の」プロパティを削除することができます。オブジェクトは、必要に応じて同じになります。

var obj = { 
       name : 'Allen', 
       last : 'Jones', 
       age : 24, 
       city : 'London' 
      } 

delete obj.last; 

console.log(obj); 

このヘルプが必要です。以下は

0

ご希望の出力を持つ汎用的な方法である:

var obj = { 
 
    name : 'Allen', 
 
    last : 'Jones', 
 
    age : 24, 
 
    city : 'London' 
 
}; 
 

 
obj2 = ['name', 'age', 'city']; 
 

 
function createObject(obj, arr) { 
 
    var newObj = {}; 
 
    
 
    arr.forEach(function(value) { 
 
     if(obj.hasOwnProperty(value)) { 
 
      newObj[value] = obj[value]; 
 
     } 
 
    }); 
 
    
 
    return newObj; 
 
} 
 

 
document.write(JSON.stringify(createObject(obj, obj2)));

0

この答えの下に示した多くの素敵な方法があります。これは機能的に連鎖可能なメソッドです。

var obj = { 
 
      name : 'Allen', 
 
      last : 'Jones', 
 
      age : 24, 
 
      city : 'London' 
 
      }, 
 
    arr = ['name', 'age', 'city'], 
 
    res = arr.reduce((p,c) => {p[c] = obj[c]; return p} ,{}); 
 

 
document.write("<pre>" + JSON.stringify(res) + "</pre>");

関連する問題