【问题标题】:convert multi level Object values to string javascript将多级对象值转换为字符串 javascript
【发布时间】:2016-10-05 05:06:09
【问题描述】:

我有以下对象

var myObject = {
    first:{
        key1:'value1',
        key2:'value2',
        key3:'value3',
        key4:'value4',
    },
    second:{
        key1:'value1',
        key2:'value2',
        key3:'value3',

    },
    third:{
        key1:'value1',
        key2:'value2',
        key3:'value3',
        key4:'value4',
        key5:'value5',
    }
}

如您所见,值 (value1, value2, value3,...) 用单引号括起来,但实际上这不是字符串值,它可以有数字值。我的目标是使用循环将此值(value1,value2,value3,...)转换为字符串。我已经尝试过forEach loop,但它不起作用。你有什么想法吗???

--编辑--

我的一些对象又生了这样的孩子

var myObject = {
    first:{
        key1:'value1',
        key2:'value2',
        key3:'value3',
        key4:'value4',
    },
    second:{
        child1:{
             key1:'value1',
             key2:'value2',
             key3:'value3',
             key4:'value4',
        },
        child2:{
             key1:'value1',
             key2:'value2',
             key3:'value3',
             key4:'value4',
        }

    },
    third:{
        key1:'value1',
        key2:'value2',
        key3:'value3',
        key4:'value4',
        key5:'value5',
    }
}

我也想将它们转换为字符串。我应该做些什么改变?

在 Angular js 中我是这样做的

angular.forEach(abc, function(value, key){
        angular.forEach(abc[key], function(v, k){
            if(typeof abc[key][k]==='object'){
                angular.forEach(abc[key][k], function(v1, k1) {
                    abc[key][k][k1] = String(abc[key][k][k1]);
                }); 
            }else{
                abc[key][k] = String(abc[key][k]);
            }
      });
  });

但是在纯 Javascript 中我该如何实现呢?

【问题讨论】:

  • “但实际上这不是字符串值” 什么意思?价值观是什么?
  • 请向我们展示两件事:1)您希望我们转换的实际数据的示例。 2) 你试过的代码。
  • 没有任何引号的数字
  • 您尝试将Number 转换为String 的原因是什么?
  • @RushiAyyappa 转换为 JSON 并返回几乎总是一个低效的解决方案。

标签: javascript arrays object foreach


【解决方案1】:

您可以使用Object.keysArray#forEach 方法。

// get all object property names and iterate over them
Object.keys(myObject).forEach(function(key) {
  // get property names of inner object and iterate over them
  Object.keys(myObject[key]).forEach(function(key1) {
    // update the property value with stringified value(using String constructor)
    myObject[key][key1] = String(myObject[key][key1]);
  });
});

var myObject = {
  first: {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 4,
  },
  second: {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',

  },
  third: {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 'value4',
    key5: 'value5',
  }
};

Object.keys(myObject).forEach(function(key) {
  Object.keys(myObject[key]).forEach(function(key1) {
    myObject[key][key1] = String(myObject[key][key1]);
  });
});

console.log(myObject);

【讨论】:

  • 附注:对于仅转换数字,toString() 很好,但如果值为nullundefined,它会抛出异常。在这些情况下,有必要使用 String() 构造函数。
  • @4castle :是的,你是对的......所以我刚刚更新了答案......谢谢
【解决方案2】:

如果问题解释正确,你可以使用for..in循环,String()构造函数

var myObject = {
    first:{
        key1:1,
        key2:2,
        key3:3,
        key4:4
    },
    second:{
        key1:1,
        key2:2,
        key3:3

    },
    third:{
        key1:1,
        key2:2,
        key3:3,
        key4:4,
        key5:5
    }
}

for (var prop in myObject) {
  for (var key in myObject[prop]) {
    myObject[prop][key] = String(myObject[prop][key])
  }
}
  
console.log(myObject)

【讨论】:

    【解决方案3】:

    在这样的对象中使用 for var 键。

    var myObject = {
        first:{
            key1:'value1',
            key2:'value2',
            key3:'value3',
            key4:'value4',
        },
        second:{
            key1:'value1',
            key2:'value2',
            key3:'value3',
    
        },
        third:{
            key1:'value1',
            key2:'value2',
            key3:'value3',
            key4:'value4',
            key5:'value5',
            key6: 1555
        }
    }
    
    for(var key in myObject) {
      for(var anotherkey in myObject[key]) {
        myObject[key][anotherkey] = String(myObject[key][anotherkey])
      }
    }
    
    console.log(myObject);

    我还建议对您的对象使用数组。这正是数组的用途,一个有序的元素序列。不要对这种结构使用键值对。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2017-09-29
      • 2012-08-28
      相关资源
      最近更新 更多