在对象中搜索字符串并形成对象数组

问题描述 投票:0回答:4

我需要在对象中搜索字符串并形成对象数组

key = {
  ID: '1',
  NAME: 'KEN',
  DEPT1: 'CSE',
  DEPT2: 'IT',
  DEPT3: 'NA',
  EMAIL: '[email protected]'
}

输出:

[{"DEPT1":"CSE"},{"DEPT2":"IT"}]

尝试过此方法,但未定义

var search = arr.push(_.findKey(key, _.curry(_.eq, 'CSE')));

console.log(search)
javascript lodash
4个回答
3
投票

例如,例如:

var result = Object.entries(key).reduce((result, [key, val]) => {
    if(key.match(/dept[12]/i)) result[key] = val;
    return result
}, []) // [{"DEPT1":"CSE"},{"DEPT2":"IT"}]

1
投票

使用lodash函数的最简单方法

const searchValues = Set('CSE', 'IT')
const arr = _.toPairs(obj).filter(([key, val]) => 
    searchValues.has(val)).map(([key, val]) => ({[key]: val}))

0
投票

尝试一下:

搜索每个关键字:

function search(keyword) {
  key = {
    ID: '1',
    NAME: 'KEN',
    DEPT1: 'CSE',
    DEPT2: 'IT',
    DEPT3: 'NA',
    EMAIL: '[email protected]'
  }

  for (const k in key) {
    if (key[k] === keyword) {
      return ({
        [k]: key[k]
      })
    }
  }

  return null
}

console.log(search('CSE'))

搜索一组关键字:

function search(keywords) {
  const key = {
    ID: '1',
    NAME: 'KEN',
    DEPT1: 'CSE',
    DEPT2: 'IT',
    DEPT3: 'NA',
    EMAIL: '[email protected]'
  }

  return Object.entries(key).reduce( (acc, [k, v]) => {
    return keywords.includes(v) 
    ? [...acc, { [k]: v } ] 
    : acc; 
  }, [])
}

const input = ['CSE', 'IT']
console.log(search(input))

0
投票

let key = {
  "ID": "1",
  "NAME": "KEN",
  "DEPT1": "CSE",
  "DEPT2": "IT",
  "DEPT3": "NA",
  "EMAIL": "[email protected]"
}

let output = []

const findKey = (searchKey) => {
  Object.keys(key).forEach(key1 => {
    key[key1] === searchKey ? output.push({
      [key1]: key[key1]
    }) : null
  })
}

findKey("CSE")

console.log(output)
© www.soinside.com 2019 - 2024. All rights reserved.