【问题标题】:Console.log Array value in ObjectConsole.log 对象中的数组值
【发布时间】:2021-12-27 12:34:23
【问题描述】:

我有以下对象。

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

我真的不明白为什么函数返回 ['app'] 而不是placementId,就像它在console.log 语句中所做的那样。谢谢!

【问题讨论】:

标签: javascript object


【解决方案1】:

Filter 不像你想象的那样工作。 return obj[y][0] 不会像您的评论所说的那样返回 ['app'].filter 会。

Filter 接受一个数组,并将保留或丢弃其中的每个元素,具体取决于您返回 true 还是 false(或者至少是“真实”或“虚假”的东西)。在这里,您从['app', 'app2', 'app3'] 开始,在过滤器内部,您是return obj['app'][0],即['placementId']。这是“真实”的东西(意思是,不是假/空/未定义),所以 'app' 被保留,其余的被丢弃。起始数组为['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);

【讨论】:

    【解决方案2】:

    您应该返回 obj[x]obj[y],因为当您传递 Obj[key] 时,它会给出值。你试图给出错误的输出。

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

    【讨论】:

      【解决方案3】:

      因为过滤器回调返回布尔值过滤器数组。如果你想先按键查找,应该是这样的:

      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 search(y){
       return obj[y][0]
      };
      

      【讨论】:

        猜你喜欢
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多