2017-07-20 135 views
2

我有對象的數組對象數組內的值:查找和替換的JavaScript

[{ 
{ 
    "enabled": true, 
    "deviceID": "eI2K-6iUvVw:APA" 
}, 
{ 
    "enabled": true, 
    "deviceID": "e_Fhn7sWzXE:APA" 
}, 
{ 
    "enabled": true, 
    "deviceID": "e65K-6RRvVw:APA" 
}, 
}] 

POST請求進來與eI2K-6iUvVw:APA設備ID,我想要做的是遍歷數組,找到設備ID並將enabled的值更改爲false

在JavaScript中怎麼可能?

+0

這是不妥當的JS數據結構開始。 – Redu

回答

0

你可以使用Array.reduce到陣列禁用新設備複製:

const devices = [ /* ... */ ]; 

const newDevices = devices.reduce((ds, d) => { 
    let newD = d; 
    if (d.deviceID === 'eI2K-6iUvVw:APA') { 
    newD = Object.assign({}, d, { enabled: false }); 
    } 
    return ds.concat(newD); 
}, []); 
+0

reduce對於這種類型的操作並不理想,因爲您正在重新創建一個屬性已更改的整個數組。 – James

+1

@James你能提出一個更好的解決方案嗎? –

3

您可以使用Array#find

let arr = [{ 
 
    "enabled": true, 
 
    "deviceID": "eI2K-6iUvVw:APA" 
 
    }, 
 
    { 
 
    "enabled": true, 
 
    "deviceID": "e_Fhn7sWzXE:APA" 
 
    }, 
 
    { 
 
    "enabled": true, 
 
    "deviceID": "e65K-6RRvVw:APA" 
 
    } 
 
]; 
 

 
const id = 'eI2K-6iUvVw:APA'; 
 

 
arr.find(v => v.deviceID == id).enabled = false; 
 

 
console.log(arr);