![](/img/trans.png)
[英]Map an array from a JSON file using modern Javascript and push it on a table
[英]JavaScript map array using JSON file
在JavaScript中,我有一個包含三個字母代碼的數組,我有一個JSON文件,其中包含每個代碼的值。 我需要將代碼映射到JSON文件中的相應值。 這是一個例子:
{"Roles" : [
{"code": "cmm", "fullname": "commentator"},
{"code": "cmp", "fullname": "composer"},
{"code": "cnd", "fullname": "conductor"},
{"code": "cng", "fullname": "cinematographer"},
{"code": "cns", "fullname": "censor"},
{"code": "com", "fullname": "compiler"}
]}
var arr = ["cmm", "com", "cng"];
var mappedArray = arr.map( ??? );
//mappedArray now contains: ["commentator", "composer", "cinematographer"]
我想不出解決這個問題的方法並不是非常低效。 有人可以幫忙嗎?
您可以使用過濾器實現此目的
var obj = {"Roles" : [ {"code": "cmm", "fullname": "commentator"}, {"code": "cmp", "fullname": "composer"}, {"code": "cnd", "fullname": "conductor"}, {"code": "cng", "fullname": "cinematographer"}, {"code": "cns", "fullname": "censor"}, {"code": "com", "fullname": "compiler"} ]} var arr = ["cmm", "com", "cng"]; var mappedArray = obj["Roles"].filter(d => arr.includes(d.code)) console.log('Filtered Array', mappedArray) console.log('Result', mappedArray.map(({fullname}) => fullname))
最有效的方法仍然是使用for / loop :
const data = {"Roles" : [{"code": "cmm", "fullname": "commentator"},{"code": "cmp", "fullname": "composer"},{"code": "cnd", "fullname": "conductor"},{"code": "cng", "fullname": "cinematographer"},{"code": "cns", "fullname": "censor"},{"code": "com", "fullname": "compiler"}]}; var arr = ["cmm", "com", "cng"]; const out = []; for (let i = 0; i < data.Roles.length; i++) { const el = data.Roles[i]; if (arr.indexOf(el.code) > -1) out.push(el.fullname); } console.log(out);
使用reduce
更實用/更整潔,但效率不高。 您可以提取所需的數據,而無需使用filter
然后 map
往返。
const data = {"Roles" : [{"code": "cmm", "fullname": "commentator"},{"code": "cmp", "fullname": "composer"},{"code": "cnd", "fullname": "conductor"},{"code": "cng", "fullname": "cinematographer"},{"code": "cns", "fullname": "censor"},{"code": "com", "fullname": "compiler"}]}; var arr = ["cmm", "com", "cng"]; var out = data.Roles.reduce((acc, c) => { if (arr.includes(c.code)) acc.push(c.fullname); return acc; }, []); console.log(out);
您必須首先過濾數組,然后映射它以獲取所需的值..您可以嘗試這樣做
let result1 = obj["Roles"].filter(function(item) { return arr.includes(item.code)}).map(filteredObj => filteredObj.fullname);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.