2017-05-31 122 views
1

我被賦予了一個數組和一個對象,並且我創建了一個函數,該函數返回一個新對象,該對象的屬性是給定對象中的屬性,並且其鍵在給定數組中。如果鍵存在於給定的數組中,但不在給定的對象中,則它應該忽略它們。它不會修改傳入的對象。選擇數組成爲對象屬性

到目前爲止,我得到這個:

function select(arr, obj) { 
    var myObj = {}; 

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

} 

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

任何想法,我究竟做錯了什麼?

+0

兩件事情:1,你不執行對象的查找。 2.你實際上沒有返回任何東西。 – Halcyon

回答

2

你了吧,有近,

  • 如果添加了一個檢查,如果關鍵是在對象(in operator),然後
  • 你需要分配到返回對象的新屬性,並在至少,
  • 您需要返回該對象。

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

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

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

0

這裏是一個ES6內襯;)

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

 
var r = Object.keys(obj).reduce((o, v) => {return (arr.some(a => {return a===v;}) && (o[v] = obj[v]), o)}, {}); 
 

 
console.log(r);