Javascript 从包含阵列属性的基础对象选择性地创建新的对象阵列
我有一个名为obj的对象,它将作为创建特定格式的新对象数组的基础 我的基本对象:Javascript 从包含阵列属性的基础对象选择性地创建新的对象阵列,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我有一个名为obj的对象,它将作为创建特定格式的新对象数组的基础 我的基本对象: var obj={ "en": [{ "faq": "faq", "about": "about" }], "hi": [{ "faq": "aksar-poochhe-jaane-vaale", "about": "hamaare-baare" }] } 我创建了一个函数getObj(),它接受两个参数lang和基本对象obj 示例场景 当我打电
var obj={
"en": [{
"faq": "faq",
"about": "about"
}],
"hi": [{
"faq": "aksar-poochhe-jaane-vaale",
"about": "hamaare-baare"
}]
}
我创建了一个函数getObj()
,它接受两个参数lang
和基本对象obj
示例场景 当我打电话时:
getObj("en", obj);
getObj("hi", obj);
我应该得到:
[{
"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' }
]
}]
[{
"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' }
]
}]
当我打电话时:
getObj("en", obj);
getObj("hi", obj);
我应该得到:
[{
"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' }
]
}]
[{
"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' }
]
}]
以下是我尝试过的:
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;
}
支持包含多个对象的
obj.en
和obj.hi
免责声明:此代码不输出最初请求的对象数组。相反,它是一个由“页面”键控的对象。(这使得代码更加高效。)如果您需要精确的输出,请查看下面的答案
var obj={
“en”:[{
“常见问题”:“常见问题”,
“关于”:“关于”
}],
“你好”:[{
“常见问题解答”:“aksar Pooche jaane vaale”,
“关于”:“哈马雷·巴雷”
}]
}
函数getObj(origLang,obj){
if(typeof obj!=='object'){return false;}
让结果={};
Object.keys(obj).forEach((lang)=>{//循环语言
obj[lang].forEach((页)=>{
如果(页面类型!=='object'){返回false;}
Object.keys(pages).forEach((page)=>{//循环页面
const url=页面[页面];
//如果不存在,则创建数组
如果(结果的类型[页面]=“未定义”){
结果[页面]={'url':'','links':[]};
}
//如果是原始语言,请添加url
如果(origLang==lang){result[page]['url']=`/${origLang}/${url}`;}
//添加链接
结果[页面]['links']。推送({
“郎”:郎,
'url':`/${origLang}/${url}`
});
});
});
});
返回结果;
}
//输出到控制台。
log(“en”数组);
console.log(getObj('en',obj));
log(“hi”数组);
console.log(getObj('hi',obj))
返回
只能返回一个值;您期望返回的值是一个列表,不包含任何内容。这还不是一个问题,因为对于如何处理lang的后续值(尚未显式传递)没有任何逻辑
所以你需要做两件事:
var obj={
“en”:[{
“常见问题”:“常见问题”,
“关于”:“关于”
}],
“你好”:[{
“常见问题解答”:“aksar Pooche jaane vaale”,
“关于”:“哈马雷·巴雷”
}]
}
函数getOtherKeys(lang、obj){
返回Object.keys(obj.filter)(key=>key!=lang)
}
//重新调整了你的职能
函数getObj(lang,obj){
var newobj={};
newobj['url']=“/”+lang+“/”+obj[lang].map(e=>e.faq);
变量s={
朗:朗,
url:newobj.url
};
newobj['links']=[s];
//我在下面的更改处理其他链接
var key=getotherkey(lang,obj);
for(键的变量键){
newobj['links'].push({
朗:关键,
url:“/”+key+“/”+obj[key].map(e=>e.faq)
})
}
返回newobj;
}
//将代码包装在数组中并处理零/其他键
函数buildObj(lang,obj){
var outerObj=[];
//移除第0个键
var otherKeys=getOtherKeys(lang,obj);
//添加主语言
if(obj[lang]){
外推(getObj(lang,obj));
}否则{
返回;
}
//添加所有其他语言
for(其他键的var键){
outerObj.push(getObj(键,obj));
}
返回ROBJ;
}
var obj={
“en”:[{
“常见问题”:“常见问题”,
“关于”:“关于”
}],
“你好”:[{
“常见问题解答”:“aksar Pooche jaane vaale”,
“关于”:“哈马雷·巴雷”
}]
}
var en=buildObj(“en”,obj);//调用数组包装器
控制台日志(en);
var hi=buildObj(“hi”,obj);
控制台日志(hi)
对象en或对象hi应该是数组吗?它是否包含多个对象?因为在您的示例中,尽管它是一个数组,但它只有一个。请花时间理解上面的代码。如果你有任何问题,我有答案。(虽然可能不是一个好的;)它的工作原理是忽略每个数组中除第一个元素外的所有元素。。。我认为现在回答还为时过早。输出与帖子不相似