在javascript对象中切片特定键

sta*_*s25 3 javascript node.js

在rails中,我有一种特殊的slice 方法来保留Hash我需要的键.在哈希中仅允许所需的密钥非常方便.

Node.js中有这样的方法吗?

Ale*_* T. 12

在JavaScript中,没有这样的方法,但是,在库中,就像lodash所谓的方法一样_.pick

var data = { a: 1, b: 2, c: 3 };
console.log(_.pick(data, 'a', 'c'))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)

你可以lodash通过安装npm

npm install lodash --save
Run Code Online (Sandbox Code Playgroud)

然后要求它到你的项目

var _ = require('lodash') // import all methods
// or just import pick method
// var pick = require('lodash/object/pick');
Run Code Online (Sandbox Code Playgroud)

或者您可以使用新的ES功能实现自己的选择,如此

const data = { a: 1, b: 2, c: 3 };

const pick = (obj, ...args) => ({
  ...args.reduce((res, key) => ({ ...res, [key]: obj[key] }), { })
})

console.log(
  pick(data, 'a', 'b')
)
Run Code Online (Sandbox Code Playgroud)


kub*_*oon 12

这些是最酷的解决方案。

硬线版本:https : //stackoverflow.com/a/39333479/683157

const object = { a: 5, b: 6, c: 7  };
const picked = (({ a, c }) => ({ a, c }))(object);

console.log(picked); // { a: 5, c: 7 }
Run Code Online (Sandbox Code Playgroud)

通用版本:https : //stackoverflow.com/a/32184094/683157

const pick = (...props) => o => props.reduce((a, e) => ({ ...a, [e]: o[e] }), {});
pick('color', 'height')(elmo);
Run Code Online (Sandbox Code Playgroud)


Adi*_*ngh 5

与 @Brandon Belvin 所说的类似,下面是 ES6 的等效内容:

/**
 * A pure function to pick specific keys from object, similar to https://lodash.com/docs/4.17.4#pick
 * @param {Object}obj: The object to pick the specified keys from
 * @param {Array}keys: A list of all keys to pick from obj
 */
const pick = (obj, keys) => 
  Object.keys(obj)
    .filter(i => keys.includes(i))
    .reduce((acc, key) => {
      acc[key] = obj[key];
      return acc;
    }, {})

// Test code
const data = { a: 1, b: 2, c: 3 };
console.log(pick(data, ['a', 'c']));
Run Code Online (Sandbox Code Playgroud)

是我为常见功能实用程序创建的要点,包括 的定义pick(),类似于https://lodash.com/docs/4.17.4#pick