我想将JSON对象转换为字符串,但是如果使用JSON.stringify()
,则输出字符串还将包含属性名称,这是我不想要的。
我可以通过遍历对象来实现此目的,但是我想要一个也适用于任何深度的嵌套对象的解决方案。
例如,如果我执行以下操作:
let myObject = {
name: 'Bob',
preferences: {
color: 'red',
food: 'pizza'
}
};
console.log(JSON.stringify(myObject));
输出字符串将是:
{"name":"Bob","preferences":{"color":"red","food":"pizza"}}
我将如何获得以下信息?
{"Bob","red","pizza"}
答案 0 :(得分:4)
使用递归并检查对象,如果不是对象,则推入结果
let myObject = {
name: 'Bob',
preferences: {
color: 'red',
food: 'pizza',
children:{
a: 'hi',
b: {
c: 'd'
}
}
}
};
let res = [];
function goInto(obj){
for(let key in obj){
if(typeof obj[key] === 'object') {
goInto(obj[key]);
return;
} else {
res.push(obj[key])
}
}
}
goInto(myObject);
console.log(res);
答案 1 :(得分:3)
听起来像您需要了解Object.values方法。
Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环所提供的顺序相同(区别在于for-in循环枚举了in ...原型链)。
这可用于快速有效地获取简单对象的值
let obj = {
"key1":"val1",
"key2":"val2",
"key3":"val3"
}
console.log(Object.values(obj));
//loop to print as string
let objString = "";
Object.values(obj).forEach((val) => {
objString = objString + " " + val
});
console.log(objString);
要实际打印为字符串或使用多维对象,您仍然需要以某种形式进行迭代。这是一个多维对象的示例。
let testObj = {
"key1":"val1",
"key2":"val2",
"key3":{
"nestedKey1":"nestedVal1",
"nestedKey2":"nestedVal2"
}
}
console.log(Object.values(testObj));
function listAsFlatString(obj){
var returnVal = "";
Object.values(obj).forEach((val) => {
if(typeof val !== "object"){
returnVal = returnVal + " " + val;
} else {
returnVal = returnVal + " " + listAsFlatString(val)
}
});
return returnVal.trim();
}
console.log(listAsFlatString(testObj))