在不使用循环的情况下,仅从javascript中提取JSON对象中的值

时间:2016-12-19 11:33:05

标签: javascript json

有一个" Nice"从json对象中获取所有值的方法(我不关心键) - 只需将值放入数组中, 没有使用循环? (lang是Javascript)

4 个答案:

答案 0 :(得分:9)

这取决于你如何定义“循环”。

您可以使用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);

答案 1 :(得分:3)

我认为您正在寻找Object.values()函数,只需将对象传递给Object的 values 方法作为第一个参数。就是这样!

Object.values({something: 'lol'});
> ["lol"]

答案 2 :(得分:1)

使用ES2017,你有Object.values()。你可以polyfill it also

只需要将JSON转换为JavaScript对象并调用Object.values()。结果是一系列值。

var obj = JSON.parse(jsonData);
var result = Object.values(obj);

答案 3 :(得分:1)

递归提取为文本

是的,这是一个循环,但是您正在调用的基础方法(例如Object.valuesarr.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(' ');
}