Javascript 获取所有对象';s数组中键的值
我有一个这样的物体:Javascript 获取所有对象';s数组中键的值,javascript,vuejs2,javascript-objects,Javascript,Vuejs2,Javascript Objects,我有一个这样的物体: myObj = { 1:{name:'a'}, 2:{name:'v'}, 3:{name:'x'}, 10:{name:'t'} }; 我想得到一个值列表,其键在下面的列表中: myList = [1,2,10] 所以我想要的结果是: [{name:'a'},{name:'v'}, {name:'t'}] 关于如何做到这一点有什么想法吗 我尝试了以下方法: const result = []; for (const childId in state
myObj = { 1:{name:'a'}, 2:{name:'v'}, 3:{name:'x'}, 10:{name:'t'} };
我想得到一个值列表,其键在下面的列表中:
myList = [1,2,10]
所以我想要的结果是:
[{name:'a'},{name:'v'}, {name:'t'}]
关于如何做到这一点有什么想法吗
我尝试了以下方法:
const result = [];
for (const childId in state.frameObjects[id].childrenIds )
{
if(state.frameObjects[childId]!==undefined)
{
result.push(state.frameObjects[childId]);
}
}
return result;
但是Vue控制台给了我这个错误:内部错误:“太多递归”您可以这样做:
var objectArray = [];
myList.forEach(function(key){
if(myObj[key]){
objectArray.push(myObj[key]);
}
});
您可以使用键在数组中迭代,只需检查
myObj
中是否存在键,如果存在,则只需将值推送到新的arrya中:
constmyobj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
常量myList=[1,2,10]
const newArr=[]
myList.forEach(键=>{
if(myObj[key]){
newArr.push(myObj[键])
}
})
log(newArr)
这可以通过几种方式实现;
其中一个选项是循环对象属性
const list = [];
for(let prop in myObj){
if(myList.includes(prop)){
list.push(myObj[prop])
}
}
使用Object.keys()可以获得相同的结果
你可以把你想要的钥匙放进一个盒子里,然后使用。如果数组包含对象中不存在的键,这也会起作用
constmyobj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
常量键=新集合([1,2,10])
const res=Object.keys(myObj).filter(key=>keys.has(+key)).map(key=>myObj[key]);
控制台日志(res)代码>只需要
var myObj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
var myList=[1,2,10]
//var result=myList.map(函数(k){return myObj[k];})
var result=myList.map(k=>myObj[k])
控制台日志(结果)代码>您可以过滤对象的键,然后映射结果
const valuesOf=(obj,keys)=>Object.keys(obj)
.filter(key=>keys.includes(parseInt(key,10)))
.map(key=>obj[key])
const myObj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
log(值sof(myObj[1,2,10]))
.as控制台包装{top:0;min height:100%}
一种更实用的方法是:myList.map(A=>myObj[A]).filter(A=>A)
注意:.filter(a=>a)
将删除未定义的尝试此操作
让myObj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
让objsArray=[]
设myList=[1,2,10];
for(让index=0;index
constmyobj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
常数myList=[1,2,10];
const result=myList?.map(key=>(myObj==null?null:myObj[key]),[])| |[];
控制台日志(结果)使用Map
myObj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
myList=[1,2,10]
map=newmap(),res=[]
Object.entries(myObj.map)(o=>map.set(o[0],o[1]))
myList.forEach(o=>{v=map.get(o.toString())
if(v)res.push(v)})
console.log(res)
以下是您想要的:
constmyobj={1:{name:'a'},2:{name:'v'},3:{name:'x'},10:{name:'t'};
常数myList=[1,2,10];
const res=Object.entries(myObj.filter)([k,v])=>{
返回列表。包括(+k);
}).map([k,v])=>{
返回v;
})
控制台日志(res)//[{name:'a'},{name:'v'},{name:'t'}]
它将导致数组中出现未定义的
s如果前面提到的键没有出现,这不会在所有情况下都起作用。因此,如果是这种情况,请运行筛选器。。。。
const result = Object.keys(myObj).map((x) => {
if (myList.includes(parseInt(x))) {
return myObj[x];
}
})