我试图添加“搜索”功能。功能到我的项目。我想要做的只是搜索JSON对象的值,以便在评估对象的成员时,我的正则表达式不会尝试匹配属性名称。
考虑以下示例:
var myObj = {
'FirstName': 'Joe',
'LastName': 'Jones',
'Age': 35,
'Address': {
'City': 'Boise',
'State': 'Idaho'
}
};
var myObjValues = JSON.stringify(myObj);
// result: "{"FirstName":"Joe","LastName":"Jones", etc... }"
但是,我想得到的是一个字符串,其中所有值都被分隔为单个字符串,用空格(或逗号,分号或制表符)分隔,如下所示:
// result: "Joe Jones 35 Boise Idaho"
我永远不会知道对象是什么。在上面的示例中,我使用了名称和地址,但对象可以是任何级别的嵌套对象。我只想要最深的属性是字符串和数字。
有没有办法使用JSON对象执行此操作?有没有一个库可以在某个地方执行此操作,我考虑编写自己的函数来剥离这些值并自己构建字符串,但并不想重新发明轮子。
提前感谢任何提示或指示!
答案 0 :(得分:8)
var vals = Object.keys(myObj).map(function(k) { return myObj[k]; });
如果你想要一个字符串结果,请使用.join(' ')
。
对于嵌套对象的更新问题,您可以执行此操作...
var vals = function getVals(o) {
return Object.keys(o)
.map(function(k) {
if (o[k] && typeof o[k] === 'object')
return getVals(o[k]);
else
return o[k];
}).join(' ');
}(myObj);
或者如果你喜欢if / else语句的条件运算符,就像这样......
var vals = function getVals(o) {
return Object.keys(o)
.map(function(k) {
return o[k] && typeof o[k] === 'object' ? getVals(o[k]) : o[k];
}).join(' ');
}(myObj);
答案 1 :(得分:4)
var myObj = {
'FirstName': 'Joe',
'LastName': 'Jones',
'Age': 35,
'City': 'Boise',
'State': 'Idaho'
};
var myObjValues = [];
for(var n in myObj)
myObjValues.push(myObj[n]);
myObjValues = myObjValues.join(' ');
答案 2 :(得分:2)
没有标准功能。
你可以使用下划线的values函数,这是代码:
var values = _.values( JSON.stringify(myObj) ),
values_str = values.join(" ");
更新:
我想知道价值观的顺序是否重要?