2017-08-04 76 views
1

我的目標是使用一個函數刪除一個值大於給定數字「num」的對象中的屬性。但是,「刪除」不起作用。在這種情況下,刪除操作不起作用,是否有更好的解決方案?在一個函數中刪除在Javascript中不起作用

function removeNumbersLargerThan(num, obj) { 
 
     for(var key in obj){ 
 
     if(obj[key] > num){ 
 
      delete obj.key; 
 
     } 
 
     } 
 
     return obj; 
 
    } 
 

 
    var obj = { 
 
    a: 8, 
 
    b: 2, 
 
    c: 'montana' 
 
    } 
 
    removeNumbersLargerThan(5, obj); 
 
    console.log(obj); // --> { b: 2, c: 'montana' }

+9

不應該是'delete obj [key];' – zero298

+0

https://stackoverflow.com/questions/208105/how-do-i-remove-a-property-from-a-javascript-object – Matthew

+0

'delete obj [key]' –

回答

0

你幾乎done.use相同一樣,如果條件的obj關鍵比賽。 delete obj[key]

function removeNumbersLargerThan(num, obj) { 
 
    for(var key in obj){ 
 
    if(obj[key] > num){ 
 
     delete obj[key]; 
 
    } 
 
    } 
 
    return obj; 
 
} 
 

 
var obj = { 
 
a: 8, 
 
b: 2, 
 
c: 'montana' 
 
} 
 
removeNumbersLargerThan(5, obj) 
 
console.log(obj); // --> { b: 2, c: 'montana' }

0

你翻轉你所訪問什麼財產。你這樣做是正確的第一次,但不是第二:

function removeNumbersLargerThan(num, obj) { 
    for(var key in obj){ 
    if(obj[key] > num){ // Correct! 
     delete obj.key; // Should be obj[key] again 
    } 
    } 
    return obj; 
} 

否則你要刪除「鍵」屬性關閉obj


的。換句話說,你的循環ISN您實際上想要的財產delete。這只是delete荷蘭國際集團上的對象的key屬性:

// What you declare 
let num = 5; 
let obj = { 
    key: "hello", 
    keyToKill: 7, 
    keyToLeaveAlone: 3 
} 

// Your initial loop to remove keys with value greater than a number 
for (let key in obj) { 
    // If I find a key whose value is greater than num 
    if (obj[key] > num) { 
     // Delete the "key" property 
     delete obj.key; 
    } 
} 

// The above will give you this: 
let incorrect = { 
    keyToKill: 7, 
    keyToLeaveAlone: 3 
} 

如果你想刪除比num你會做以下,其值越大的屬性:

// If you do the following instead: 
for (let key in obj) { 
    // If I find a key whose value is greater than num 
    if (obj[key] > num) { 
     // Delete the property who's value is greater than num 
     delete obj[key]; 
    } 
} 

// You'll get this 
let correct = { 
    key: "hello", 
    keyToLeaveAlone: 3 
} 
+0

你是什麼意思的「否則你會刪除的關鍵」屬性的obj「? – tskittles

+0

@tskittles看到我的編輯 – zero298

+0

啊是有道理的。所以當你使用點符號的時候,你實際上在對象上發現了一個帶有鍵「key」的值 – tskittles

0

你需要用正確的property accessor使用變量作爲值的括號表示法。

delete obj[key]; 
//  ^^

function removeNumbersLargerThan(num, obj) { 
 
    for (var key in obj) { 
 
     if (obj[key] > num) { 
 
      delete obj[key]; 
 
     } 
 
    } 
 
    return obj; 
 
} 
 

 
var obj = { a: 8, b: 2, c: 'montana' }; 
 

 
removeNumbersLargerThan(5, obj); 
 
console.log(obj); // { b: 2, c: 'montana' }

0

function removeNumbersLargerThan(num, obj) { 
 
     for(var key in obj){ 
 
     if(obj[key] > num){ 
 
      delete obj.key; 
 
     } 
 
     } 
 
     return obj; 
 
    } 
 

 
    var obj = { 
 
    a: 8, 
 
    b: 2, 
 
    c: 'montana' 
 
    } 
 
    removeNumbersLargerThan(5, obj); 
 
    console.log(obj); // --> { b: 2, c: 'montana' }

function removeNumbersLargerThan(num, obj) { 
 
     for(var key in obj){ 
 
     if(obj[key] > num){ 
 
      delete obj[key]; 
 
     } 
 
     } 
 
     return obj; 
 
    } 
 

 
    var obj = { 
 
    a: 8, 
 
    b: 2, 
 
    c: 'montana' 
 
    } 
 
    removeNumbersLargerThan(5, obj); 
 
    console.log(obj); // --> { b: 2, c: 'montana' }

相關問題