Javascript中有没有一种方法只从JSON对象获取值?

Javascript中有没有一种方法只从JSON对象获取值?,javascript,json,Javascript,Json,我正在尝试将“搜索”功能添加到我的项目中。我想做的是只搜索JSON对象的值,这样当我计算对象的成员时,正则表达式就不会试图匹配属性名 考虑以下示例: var myObj = { 'FirstName': 'Joe', 'LastName': 'Jones', 'Age': 35, 'Address': { 'City': 'Boise', 'State': 'Idaho' } }; var myObjValues = JSON.stringify(myOb

我正在尝试将“搜索”功能添加到我的项目中。我想做的是只搜索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对象来实现这一点?是否有一个库可以在某个地方实现这一点,我曾考虑编写自己的函数来去掉这些值并自己构建字符串,但不想重新发明轮子


提前感谢您提供的任何提示或建议

此功能没有标准功能

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(' ');
可以使用下划线的函数,代码如下:

var values = _.values( JSON.stringify(myObj) ),
    values_str = values.join(" ");
更新:

我想知道价值的顺序是否重要

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);



一个快速的..in循环应该就可以了。注意wong2回答中的评论:“我想知道值的顺序是否重要?”因为如果重要,那么。。。我只是更新了我的问题,表明我不知道对象是什么,也不知道嵌套对象的深度。我不是Javascript大师,所以如果有一个库可以做到这一点,我更愿意使用它。谢谢关于for循环的提示,但是我认为我的要求有点复杂。。。(?)请链接到图书馆/文档。谢谢@wong2!不,顺序不重要。使用下划线库的好主意。但是,在我的(庞大的)项目中,我目前没有使用下划线库,如果可能的话,我希望避免使用下划线库。jQuery库中是否有等效的方法?我想我可以去掉“values()”方法,但是。。。好奇+1+1表示友好和“实用”。如果有办法删除
函数/返回
语法fluff;-)另外,应该注意的是,
Object.keys
在ECMAScript第5版中是[新的]。@pst:我认为ES6可能会有一些更好的lambda语法,但是
Object.keys
是ES5特有的,但是
Array.prototype.map
也是如此。这个答案是我法庭命令的社区服务的一部分-这个浏览器的兼容性如何?@wong2:它与所有正确的浏览器都完全兼容,没有错误的浏览器。;-)我认为这不会起作用,因为在这个对象下面可能有很多嵌套对象和其他嵌套对象。我只想要最深对象属性的值。也许我可以使用您的代码进行一些递归和类型检查,但也许还有另一种解决方案?谢谢