2016-11-21 12 views
1

既存のオブジェクトに与えられたプロパティと指定された配列に存在するキーを持つ新しいオブジェクトを返そうとしています。私はオブジェクトを変更することはできませんし、キーが配列に存在するがオブジェクトに存在しない場合、キーは無視する必要があります。私はオブジェクトのキーに配列の要素を比較する方法にハングアップします。既存の配列とオブジェクトから新しいオブジェクトを作成する

function picker(array, obj) { 
    var newObj = {}; 
    for (var i = 0; i < arrary.length; i++) { 
     if (array[i] !== obj[i]) { 
      newObj[array[i]] = obj[i]; 
     } 
    } 
    return newObj; 
} 

var array = [ 
    'a', 
    'c', 
    'e' 
]; 
var obj = { 
    a: 1, 
    b: 2, 
    c: 3, 
    d: 4 
}; 

var bubble = picker(array, obj); 
console.log(bubble); result --> `{ a: 1, c: 3 }` 

答えて

1

あなたは、おそらくこのような何か意味:objは名前array[i]を持つプロパティが含まれている場合、その後、newObjにそのプロパティを追加し、ある

function picker(array, obj) { 
 
    var newObj = {}; 
 
    for (var i = 0; i < array.length; i++) { 
 
    if (array[i] in obj) { 
 
     newObj[array[i]] = obj[array[i]]; 
 
    } 
 
    } 
 
    return newObj; 
 
} 
 
var array = ['a', 'c', 'e']; 
 
var obj = {a: 1, b: 2, c: 3, d: 4}; 
 
console.log(picker(array, obj));

を。

reduceforEach、またはfor...ofで繰り返し処理すると、インデックスiと混乱することはありません。

function picker(array, obj) { 
 
    return array.reduce(function(newObj, key) { 
 
    if (key in obj) newObj[key] = obj[key]; 
 
    return newObj; 
 
    }, {}); 
 
} 
 
var array = ['a', 'c', 'e']; 
 
var obj = {a: 1, b: 2, c: 3, d: 4}; 
 
console.log(picker(array, obj));

0

あなたはキーが配列に存在されているかどうかをチェックしていません。

条件if (array[i] !== obj[i]) {は、オブジェクトキーの代わりにオブジェクト値で配列キーをチェックしようとしています。また、0obj[0]が存在しないため、obj[i]も正しくありません。

forループの代わりにObject.keysを使用する別のバリ​​エーションです。

function picker(array, obj) { 
 
    var newObj = {}; 
 
    Object.keys(obj).forEach(function(key){ 
 
    if(array.indexOf(key) > -1) { 
 
     newObj[key] = obj[key]; 
 
    } 
 
    }); 
 
    
 
    return newObj; 
 
} 
 
var array = ['a', 'c', 'e']; 
 
var obj = {a: 1, b: 2, c: 3, d: 4}; 
 
console.log(picker(array, obj));

1

あなたは基本的にのみ、キーごとに値が取られarray、の項目に基づいて、オブジェクト、キーの後にキーを作成します

const x = array.reduce((total, current) => current in obj ? ({ 
    ...total, 
    [current]: obj[current] 
}) : total, {}); 

ような何かを行うことができますobjから。 the fiddleをチェックしてください。

関連する問題