[英]Console.log Array value in Object
我有以下 object。
let obj = { 'app': ['placementId'], 'app2': ['siteId'], 'app3': ['channel_id'], }; function search(y) { return Object.keys(obj).filter((x, id, arr) => { console.log(obj['app'][0]) // returns 'placementId' if (x == y) { return obj[y][0] // returns ['app'] } }) }; let result = search('app'); console.log(result);
我真的不明白为什么 function 返回 ['app'] 而不是 placementId,就像在 console.log 语句中那样。 谢谢!
Filter
不像你想象的那样工作。 return obj[y][0]
不会像您的评论所说的那样返回['app']
。 .filter
可以。
过滤器接受一个数组,并将保留或丢弃其中的每个元素,具体取决于您返回true
或false
(或至少是“真”或“假”)。 在这里,您从['app', 'app2', 'app3']
开始,在过滤器内部,您return obj['app'][0]
,即['placementId']
。 这是“真实”的东西(意思是,不是假/空/未定义),所以保留了'app'
,并丢弃了 rest。 起始数组是['app', 'app2', 'app3']
,过滤后的数组是['app']
。
你想要做的事情可以简单地通过这种方式完成:
let obj = { 'app': ['placementId'], 'app2': ['siteId'], 'app3': ['channel_id'], }; const search = y => obj[y][0]; let result = search('app'); console.log(result);
您应该返回obj[x]
或obj[y]
,因为当您传递Obj[key]
时,它会给出值。 您试图给出错误的 output。
let obj={ 'app': ['placementId'], 'app2': ['siteId'], 'app3': ['channel_id'], }; function search(y){ return Object.keys(obj).filter((x, id, arr)=> { if(x===y) { console.log(x,y); //gives out 'app app' console.log(obj[x]); //gives out [placementId] console.log(obj[x][0]); //gives out placementId return obj[y] } }) }; console.log(search('app')); //filter will only give that item (out of multiple), where conditions matched, so output is 'app' (in the item out of all, where condition matched);
因为过滤器回调将 boolean 值返回到过滤器数组。 如果你想先通过键找到它应该是这样的:
let obj={
'app': ['placementId'],
'app2': ['siteId'],
'app3': ['channel_id'],
};
function search(y){
return obj[Object.keys(obj).find((x)=> x === y)][0];
};
search('app');
在当前情况下无需使用过滤器 function:
function search(y){
return obj[y][0]
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.