Awe*_*web 4 javascript ecmascript-6
是否有一种干净的方法来返回一个新对象,该对象省略了原始对象包含的某些属性,而不必使用像lodash这样的东西?
Edd*_*oro 25
在现代环境中,您可以使用以下代码片段:
function omit(key, obj) {
const { [key]: omitted, ...rest } = obj;
return rest;
}
Run Code Online (Sandbox Code Playgroud)
Geo*_*ale 21
const {omittedPropertyA, omittedPropertyB, ...remainingObject} = originalObject;
Run Code Online (Sandbox Code Playgroud)
使用 ES7
您可以使用对象解构和扩展运算符来省略 javascript 对象的属性:
const animalObject = { 'bear': 1, 'snake': '2', 'cow': 3 };
const {bear, ...other} = animalObject
// other is: { 'snake': '2', 'cow:' 3}
Run Code Online (Sandbox Code Playgroud)
来源:https : //remotedevdaily.com/two-ways-to-omit-properties-from-a-javascript-object/
Gra*_*sky 21
尚未提及的解决方案:
o = {a: 5, b: 6, c: 7}
Object.fromEntries(Object.entries(o).filter(e => e[0] != 'b'))
// Object { a: 5, c: 7 }
Run Code Online (Sandbox Code Playgroud)
o = {a: 1, b: 2, c: 3, d: 4}
exclude = new Set(['a', 'b'])
Object.fromEntries(Object.entries(o).filter(e => !exclude.has(e[0])))
// Object { c: 3, d: 4 }
Run Code Online (Sandbox Code Playgroud)
使用上述方法是因为即使 中 的元素数量与 中的元素数量处于同一渐近等价类中,Set它也会导致线性算术复杂性。excludeo
小智 12
const x = {obj1: 1, obj2: 3, obj3:26};
const {obj1,obj2, ...rest} = x;
console.log(rest)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.9.1/d3.min.js"></script>Run Code Online (Sandbox Code Playgroud)
使用带有递归的 ES7 省略键和键数组。
function omit(keys, obj) {
if (!keys.length) return obj
const { [keys.pop()]: omitted, ...rest } = obj;
return omit(keys, rest);
}
Run Code Online (Sandbox Code Playgroud)
这是建立在@Eddie Cooro 回答之上的。
如果您知道要保留和省略的属性列表,则以下"白名单"方法应该有效:
const exampleFilter = ({ keepMe, keepMeToo }) => ({ keepMe, keepMeToo })
console.log(
exampleFilter({
keepMe: 'keepMe',
keepMeToo: 'keepMeToo',
omitMe: 'omitMe',
omitMeToo: 'omitMeToo'
})
)Run Code Online (Sandbox Code Playgroud)
可以使用Object.assign()、删除
var not = ["a", "b"]; // properties to delete from obj object
var o = Object.assign({}, obj);
for (let n of not) delete o[n];
Run Code Online (Sandbox Code Playgroud)
或者
var props = ["c", "d"];
let o = Object.assign({}, ...props.map(prop => ({[prop]:obj[prop]})));
Run Code Online (Sandbox Code Playgroud)
当然,为什么不类似:
var original = {
name: 'Rory',
state: 'Bored',
age: '27'
};
var copied = Object.assign({}, original);
delete copied.age;
console.log(copied);
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/4nL08zk4/
blacklistnpm上有一个具有非常灵活的api 的软件包。
这也是使用对象剩余扩展提议的一种情境技巧(阶段3)。
const {a, b, ...rest} = {a: 1, b: 2, c: 3, d: 4};
a // 1
b // 2
rest // {c: 3, d: 4}
Run Code Online (Sandbox Code Playgroud)
这通常用在react组件中,在这些组件中您想使用一些属性,并将其余的作为prop传递给a <div {...props} />或类似属性。
小智 6
const { bar, baz, ...qux } = foo
Run Code Online (Sandbox Code Playgroud)
现在,您的对象qux具有和和foo以外的所有属性。barbaz
基于其他答案:如果不需要可重用性或抽象,这将删除与IIFE内联的黑名单属性。
(
({
// Properties to remove from `someObject`.
omitMe,
omitMeToo,
// The rest of `someObject`, to keep.
...keep
}) => keep
)(someObject)
Run Code Online (Sandbox Code Playgroud)
const someObject = {
keepMe: 'keepMe',
keepMeToo: 'keepMeToo',
omitMe: 'omitMe',
omitMeToo: 'omitMeToo',
};
console.log(
(
({
omitMe,
omitMeToo,
...keep
}) => keep
)(someObject)
);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10651 次 |
| 最近记录: |