繁体   English   中英

Console.log Object 中的数组值

[英]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可以。

过滤器接受一个数组,并将保留或丢弃其中的每个元素,具体取决于您返回truefalse (或至少是“真”或“假”)。 在这里,您从['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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM