2017-01-11 1 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

'если (обр [я] === 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 }

Смежные вопросы