簡體   English   中英

如何從對象中刪除數組屬性

[英]how do i delete array property from an object

我想刪除屬性period_toperiod_from但是如果我使用delete.period_to或delete.period_to[0]它不會刪除。

function someData(data)
{
    var formkey = [];
    var formval = [];
    var ch = data;
    var clen = ch.length;
    for(var i =0; i < clen; i++){
        formkey.push(ch[i].name);
        formval.push(ch[i].value);
    }
    var result = {};
    formkey.forEach((key, i) => result[key] = formval[i]);

    delete result.table;
    delete result.redirect_to;
    delete result.dbres;
    delete result.period_to;
    delete result.period_from;
    //console.log(result);
    //
    return result;
}

-Chrome控制台

{name: "qwerty", client_id: "1", user_id: "1", period_from[2]: "11", period_from[1]: "01", …}
client_id: "1"
name: "qwerty"
period_from[0]: "11"
period_from[1]: "01"
period_from[2]: "11"
period_to[0]: "111"
period_to[1]: "09"
period_to[2]: "11"
user_id: "1"
__proto__: Object

很少觀察到:

  • 如果您的obj如OP -- chrome console部分所述。 然后,您應該刪除具有確切名稱的對象屬性。

    演示

 var obj = { "client_id": "1", "name": "qwerty", "period_from[0]": "11", "period_from[1]": "01", "period_from[2]": "11", "period_to[0]": "111", "period_to[1]": "09", "period_to[2]": "11", "user_id": "1" }; delete obj["period_to[0]"]; delete obj["period_from[0]"]; console.log(obj); 

  • 如果您的對象是這樣的:

      var obj = { "client_id": "1", "name": "qwerty", "period_from": ["11","01","11"], "period_to[0]": ["111","09","11"], "user_id": "1" }; 

    然后嘗試下面的代碼

 var obj = { "client_id": "1", "name": "qwerty", "period_from": ["11","01","11"], "period_to": ["111","09","11"], "user_id": "1" }; delete obj.period_to; delete obj.period_from; console.log(obj); 

刪除是一個運算符,而不是一個函數。 刪除句號並替換為空格。

delete data.period_to

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/delete

例如,如果要刪除period_from[2] ,則必須在鍵名周圍加上引號,因為該鍵名當前無效。 然后,您可以使用方括號表示法刪除該屬性。

 const obj = { name: "qwerty", client_id: "1", user_id: "1", "period_from[2]": "11", "period_from[1]": "01" } delete obj['period_from[2]']; console.log(obj) 

您可以將其第一部分縮減為單個reduce函數,這應該使其更具可讀性並且更易於排除故障。

另外,也可以先測試屬性,然后僅添加所需的屬性,而不是嘗試在以后進行大量刪除。

 var propRgx = /^(table|redirect_to|dbres|period_to|period_from)/ function allowProperty(prop){ return !propRgx.test(prop) //if the property matches any of those, return false } function someData(data) { //All of the assignment can be replaced with this reduce, and instead of deleting afterward, you can test the properties inside of here: var result = data.reduce(function(obj, t){ if(allowProperty(t.name)) obj[t.name] = t.value return obj }, {}) return result; } 

您可以使用restdestructuring

 var obj = {name: "1", client_id: "1", user_id: "1", period_from: [], period_to: []}; var period_to, period_from; ({period_to, period_from, ...obj} = obj); console.log(obj); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM