【发布时间】:2017-05-04 10:48:55
【问题描述】:
是否有一种“好”的方式从 json 对象中获取所有值(我不关心键) - 只需将值放入数组中, 不使用循环? (语言是 Javascript)
【问题讨论】:
-
你为什么不想要一个循环?没有循环你可以试试this
-
谢谢,现在有点早了 - 我想几个月后这将是正确的答案 :-)
标签: javascript json
是否有一种“好”的方式从 json 对象中获取所有值(我不关心键) - 只需将值放入数组中, 不使用循环? (语言是 Javascript)
【问题讨论】:
标签: javascript json
是的,这是一个循环,但您调用的底层方法(例如 Object.values 或 arr.map 仍然是循环)。我发现这对于从 json 对象中提取文本以进行全文搜索特别有用,并认为它很有用,因为我来到这里最初需要这个,但答案只触及表面,因为 json 本质上是递归的。
function textFromJson(json) {
if (json === null || json === undefined) {
return '';
}
if (!Array.isArray(json) && !Object.getPrototypeOf(json).isPrototypeOf(Object)) {
return '' + json;
}
const obj = {};
for (const key of Object.keys(json)) {
obj[key] = textFromJson(json[key]);
}
return Object.values(obj).join(' ');
}
【讨论】:
在 ES2017 中,您拥有 Object.values()。你可以polyfill it also。
您只需要将 JSON 转换为 JavaScript 对象并调用 Object.values()。结果是一个值数组。
var obj = JSON.parse(jsonData);
var result = Object.values(obj);
【讨论】:
这取决于你如何定义“循环”。
您可以使用Object.keys 提取属性,然后将map 提取到它们的值。
…尽管如此,它本质上仍然是一个循环。
var json = `{ "foo": 1, "bar": 2, "baz": 3 }`;
var obj = JSON.parse(json);
var values = Object.keys(obj).map(function (key) { return obj[key]; });
console.log(values);
如果浏览器支持较弱,您可以使用values 方法。
var json = `{ "foo": 1, "bar": 2, "baz": 3 }`;
var obj = JSON.parse(json);
var values = Object.values(obj);
console.log(values);
【讨论】:
我认为您正在寻找 Object.values() 函数,只需将对象作为第一个参数传递给 Object 的 values 方法。就是这样!
Object.values({something: 'lol'});
> ["lol"]
【讨论】: