【问题标题】:How to filter array value in object javascript?如何过滤对象javascript中的数组值?
【发布时间】:2021-01-30 04:04:48
【问题描述】:

我有一个包含数组的对象,我想根据数组值过滤对象。

例如:

    {
       "sun":["sleep","walk"],
       "mon":["read","dance","ride"],
       "tue":["work","dance","sleep"],
    }

如果我输入关键字“睡眠”,那么结果应该如下

    {
      "sun":["sleep"],
      "tue":["sleep"],
    }

任何建议都会有所帮助

【问题讨论】:

标签: javascript object lodash


【解决方案1】:

只需遍历对象并进行操作,请在下面找到工作代码:

const obj = {
  "sun": ["sleep", 'walk'],
  "mon": ["read", "dance", "ride"],
  "tue": ["work", "dance", "sleep"],
}

function filterIt(filterString) {
  const result = {};
  for (const prop in obj) {
    if (obj[prop].includes(filterString)) {
      result[prop] = [filterString];
    }
  }
  return result;
}

const finalResult = filterIt('sleep');
console.log(finalResult);

【讨论】:

    【解决方案2】:

    解决这个问题的有用工具:

    let obj =
    {
      "sun": ["sleep", "walk"],
      "mon": ["read", "dance", "ride"],
      "tue": ["work", "dance", "sleep"],
    };
    
    let result = Object.fromEntries(
      Object.entries(obj)
        .filter(kvp => kvp[1].includes('sleep'))
        .map(([k, v]) => [k, v.filter(o => o === 'sleep')])
      )
    
    console.log(result)

    【讨论】:

      【解决方案3】:

      使用Object.keysmapincludes

      let obj ={
             "sun":["sleep","walk"],
             "mon":["read","dance","ride"],
             "tue":["work","dance","sleep"],
          }
      
      let new_obj = {}
      let search = 'sleep'
      
      Object.keys(obj).map(key => {
           obj[key].includes(search) ? new_obj[key]=[search] : ''
      })
      
      console.log(new_obj)
      

      【讨论】:

        【解决方案4】:

        您可以使用_.transform() 创建一个新对象。检查值数组 (v) 是否包含 str,以及它是否使用包含 str 的新数组分配键:

        const fn = (obj, str) => _.transform(obj, (o, v, k) => {
          if(v.includes(str)) o[k] = [str]
        })
        
        const obj = {
          "sun":["sleep","walk"],
          "mon":["read","dance","ride"],
          "tue":["work","dance","sleep"],
        }
        
        const result = fn(obj, 'sleep')
        
        console.log(result)
        <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-22
          • 2021-04-23
          • 2020-07-21
          • 2018-11-22
          • 2020-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多