Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取所有对象';s数组中键的值_Javascript_Vuejs2_Javascript Objects - Fatal编程技术网

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];
        }
    })