2017-01-11 8 views
1

に新しいオブジェクトに選択した単語を数える:は、私が持っているJS

function selectMutualKeys(arr, obj) { 
    var o = {}; 
    for (var i = 0; i < arr.length; i++) { 
    var key = arr[i]; 
    if (arr[i] === obj[key]) { 
     o[key] = obj[key] ; 
    } 
    } 
    return o; 
} 

は、相互に現在のキー/値を持つ新しいオブジェクトを返す必要があります:私は

var arr = ['a', 'c', 'e']; 
var obj = { a: 1, b: 2, c: 3, d: 4}; 
var out = selectMutualKeys(arr, obj); 
console.log(out); // --> { a: 1, c: 3 } 

何をしないのですか?

+0

'場合(ARR [I] === OBJ [キー])'何これはチェックすることになっていますか? – fafl

+0

主な問題はこの 'if(arr [i] === obj [key])'です。オブジェクトのキーの値で配列の値をチェックしているので、正しいものを返すことはありません(例)。それは 'if(arr [i] === key)'でなければなりません。 –

答えて

0

function selectMutualKeys(arr, obj) { 
 
var o = {}; 
 
for (var i = 0; i < arr.length; i++) { 
 
    var key = arr[i]; 
 
    if (obj[key]) { 
 
     o[key] = obj[key] ; 
 
    } 
 
} 
 
return o; 
 
} 
 

 

 
    var arr = ['a', 'c', 'e']; 
 
    var obj = { 'a': 1, b: 2, c: 3, d: 4}; 
 
    var out = selectMutualKeys(arr, obj); 
 
    console.log(out); // --> { a: 1, c: 3 }

1

キーは、オブジェクトのプロパティである場合は、値を割り当て、その後、in operatorで、チェックすることができます。

if (key in obj) { 

function selectMutualKeys(arr, obj) { 
 
    var o = {}, key, i; 
 
    for (i = 0; i < arr.length; i++) { 
 
     key = arr[i]; 
 
     if (key in obj) { 
 
      o[key] = obj[key]; 
 
     } 
 
    } 
 
    return o; 
 
} 
 

 
var arr = ['a', 'c', 'e'], 
 
    obj = { a: 1, b: 2, c: 3, d: 4 }, 
 
    out = selectMutualKeys(arr, obj); 
 

 
console.log(out); // { a: 1, c: 3 }

関連する問題