【问题标题】:How do I loop through an object and replace spaces in the key? [duplicate]如何循环遍历对象并替换键中的空格? [复制]
【发布时间】:2014-07-28 21:28:17
【问题描述】:

我正在尝试遍历具有属性和值的对象。该对象是动态创建的。我的问题是动态对象属性是一个包含空格的字符串。但是,Javascript 对象属性不能包含空格。如何循环遍历该对象并转换属性名称以便去掉空格?感谢您的帮助,以下是数据:

ANI: "4693584648"
Action Type: "IVR"
Brand: "Alpha Max Boost"
CSR Transfer: "No"
Call Date: "05/03/2014"
Call Status: "Complete"
Call Time: "15:59:36"
Customer ID: "114360"
DNIS: "9257324175"
First Name: "Isaac"
ID: "342262"
Last Name: "Torres"
OCO Action: "Early Cancel Save Sale Accepted (38.71)"
Order ID: "661438"
Recognition Method: "Automatic"
Status Group: "In Trial - Introduction (38.71)"

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    对象的键中可以有空格,如果你仍然想删除它们,你可以这样做

    for (var k in o) {
        if (k.replace(/\s/g, '') != k && o.hasOwnProperty(k)) {
            o[k.replace(/\s/g, '')] = o[k];
            delete o[k];
        }
    }
    

    FIDDLE

    如果你有嵌套的对象和数组,你必须让它递归

    【讨论】:

    • 我会添加o.hasOwnProperty(k),只是为了确保您没有对父对象做任何事情。
    • @robbmj - 我通常不认为这是一个问题,除非有人弄乱了对象原型,但无论如何我都会添加它,它不会伤害任何东西,只是一些字符。
    • 99/100 次你可以安全地省略 hasOwnProperty 检查。只是当您的应用在生产中崩溃时,这 1% 可能是一个真正的痛苦。
    • @robbmj - 是的,我通常只是将其省略,因为我从不弄乱对象原型,所以我知道我不必使用它,但它是 100/100发布代码时我应该会更好地使用它。
    【解决方案2】:

    JavaScript 对象当然可以在其属性名称中包含空格。不过,您必须更改 setter/getter 表示法:

    // An array of your sample objects
    var test = [{ ... }, { ... }, ...];
    
    // Output the call status of the first one
    console.log(test[0]['Call Status']); // should output "Complete"
    

    【讨论】:

    • 上面的数据是动态创建的,可以是对象数组。所以我需要做类似的事情: for (var d in data) { //replace space in }
    • 我是说你不需要替换空格。您可以使用“数组”表示法访问名称中带有空格的属性。
    • 我实际上并没有引用它。一个插头是。我正在尝试为 Angularjs 中的 ngGrid 转换数据
    猜你喜欢
    • 2011-02-26
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2014-02-22
    • 1970-01-01
    • 2011-05-17
    • 2016-07-08
    相关资源
    最近更新 更多