miy*_*avv 5 javascript arrays object ecmascript-6
我有一个名为的对象obj,它将用作创建某种格式的对象的新数组的基础。
我的基础对象:
var obj={
"en": [{
"faq": "faq",
"about": "about"
}],
"hi": [{
"faq": "aksar-poochhe-jaane-vaale",
"about": "hamaare-baare"
}]
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个getObj()接受两个参数lang和基础对象的函数obj。
范例场景
当我打电话时:
getObj("en", obj);
Run Code Online (Sandbox Code Playgroud)
我应该得到:
[{
"url": "/en/faq",
"links": [
{ lang: 'en', url: '/en/faq' },
{ lang: 'hi', url: '/hi/aksar-poochhe-jaane-vaale' }
]
},
{
"url": "/en/about",
"links": [
{ lang: 'en', url: '/en/about' },
{ lang: 'hi', url: '/hi/hamaare-baare' }
]
}]
Run Code Online (Sandbox Code Playgroud)
当我打电话时:
getObj("hi", obj);
Run Code Online (Sandbox Code Playgroud)
我应该得到:
[{
"url": "/hi/aksar-poochhe-jaane-vaale",
"links": [
{ lang: 'en', url: '/en/faq' },
{ lang: 'hi', url: '/hi/aksar-poochhe-jaane-vaale' }
]
},
{
"url": "/hi/hamaare-baare",
"links": [
{ lang: 'en', url: '/en/about' },
{ lang: 'hi', url: '/hi/hamaare-baare' }
]
}]
Run Code Online (Sandbox Code Playgroud)
以下是我尝试的方法:
function getObj(lang, obj){
var newobj = {};
newobj['url'] = "/"+ lang +"/"+obj[lang].map(e=>e.faq);
var s ={lang: lang, url: newobj.url};
newobj['links']=[s];
return newobj;
}
Run Code Online (Sandbox Code Playgroud)
支持obj.en并obj.hi包含多个对象。
免责声明:此代码不会按照最初的请求输出对象数组。相反,它是一个以“page”为键的对象。(这使得代码更加高效。)如果您需要精确的输出,请查看下面的答案。
var obj={
"en": [{
"faq": "faq",
"about": "about"
}],
"hi": [{
"faq": "aksar-poochhe-jaane-vaale",
"about": "hamaare-baare"
}]
}
function getObj(origLang, obj) {
if (typeof obj !== 'object') { return false; }
let result = {};
Object.keys(obj).forEach((lang) => { // Loop languages
obj[lang].forEach((pages) => {
if (typeof pages !== 'object') { return false; }
Object.keys(pages).forEach((page) => { // Loop pages
const url = pages[page];
// Create array if doesn't exist
if (typeof result[page] == 'undefined') {
result[page] = {'url': '', 'links': []};
}
// If original lang, add the url
if (origLang == lang) { result[page]['url'] = `/${origLang}/${url}`; }
// Add the links
result[page]['links'].push({
'lang': lang,
'url': `/${origLang}/${url}`
});
});
});
});
return result;
}
// Output to console.
console.log('The "en" array');
console.log(getObj('en', obj));
console.log('The "hi" array');
console.log(getObj('hi', obj));Run Code Online (Sandbox Code Playgroud)
旧版本。更具可读性,但需要循环对象两次。
var obj={
"en": [{
"faq": "faq",
"about": "about"
}],
"hi": [{
"faq": "aksar-poochhe-jaane-vaale",
"about": "hamaare-baare"
}]
}
function getObj(lang, obj){
const target = obj[lang];
let results = [];
target.forEach((pages) => {
if (typeof pages !== 'object') { return false; }
Object.keys(pages).forEach((page) => {
const url = pages[page]; // Get the url
results.push({
'url': "/" + lang + "/" + url,
'links': getLinks(page, obj) // Form the links
});
});
});
return results;
}
function getLinks(page, obj) {
let links = [];
if (typeof obj !== 'object') { return false; }
Object.keys(obj).forEach((lang) => {
obj[lang].forEach((target) => {
links.push({
'lang': lang,
'url': "/" + lang + "/" + target[page]
});
});
});
return links;
}
// Output to console.
console.log('The "en" array');
console.log(getObj('en', obj));
console.log('The "hi" array');
console.log(getObj('hi', obj));Run Code Online (Sandbox Code Playgroud)
旧的 JavaScript:
var obj={
"en": [{
"faq": "faq",
"about": "about"
}],
"hi": [{
"faq": "aksar-poochhe-jaane-vaale",
"about": "hamaare-baare"
}]
}
function getObj(lang, obj){
var target = obj[lang],
results = [];
for (var i = 0; i < target.length; i++) {
var pages = target[i]; // Get the object {"faq": "faq", "about", "about"}
for (var page in pages) {
if (!pages.hasOwnProperty(page)) { continue; }
var url = pages[page]; // Get the url
results.push({
'url': "/" + lang + "/" + url,
'links': getLinks(page, obj) // Form the links
});
}
}
return results;
}
function getLinks(page, obj) {
var links = [];
for (var lang in obj) { // Loop through each language
if (!obj.hasOwnProperty(lang)) { continue; }
var targets = obj[lang];
for (var i=0; i < targets.length; i++) {
var target = targets[i];
links.push({
'lang': lang,
'url': "/" + lang + "/" + target[page]
});
}
}
return links;
}
// Output to console.
console.log('The "en" array');
console.log(getObj('en', obj));
console.log('The "hi" array');
console.log(getObj('hi', obj));Run Code Online (Sandbox Code Playgroud)