簡體   English   中英

不使用循環僅提取 JSON object 中的值 javascript

[英]Extract only values from JSON object in javascript without using a loop

有沒有一種“不錯”的方法可以從 json object 中獲取所有值(我不關心鍵)——只需將值放入數組中,而不使用循環? (lang 是 Javascript)

這取決於您如何定義“循環”。

您可以使用Object.keys提取屬性,然后map它們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"]

遞歸提取為文本

是的,這是一個循環,但您正在調用的基礎方法(例如Object.valuesarr.map仍然是 loops 我發現這對於從 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 它

您只需要將 JSON 轉換為 JavaScript 對象並調用 Object.values()。 結果是一個值數組。

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

如果將 function 傳遞給JSON.parse ,每次解析值時都會調用它:

function get_values(json) {
   let values = []
   JSON.parse(json, (key,value)=>{ values.push(value) })
   return values
}

前任:

get_values(`{"a":1, "b":[true, false], "c":3}`)
// returns a list of:
• 1
• true
• false
• [true, false]
• 3
• {a:1, b:[true, false], c:3}

注意:如果您不認為完整的 object 是一個“值”,只需刪除最后一項即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM