Javascript ES6处理剩余的对象分解(对象修剪)
当与rest参数一起使用时,destructuring特性的一个很好的用例是,您可以得到修剪过的克隆Javascript ES6处理剩余的对象分解(对象修剪),javascript,ecmascript-6,Javascript,Ecmascript 6,当与rest参数一起使用时,destructuring特性的一个很好的用例是,您可以得到修剪过的克隆 var source = { w1: 'val1', w2: 'val2', unwanted1: 'val3', unwanted2: 'val4'}; var {unwanted1, unwanted2, ...target} = source; console.log(target); // `{ w1: 'val1', w2: 'val2' }` Exactly what you wan
var source = { w1: 'val1', w2: 'val2', unwanted1: 'val3', unwanted2: 'val4'};
var {unwanted1, unwanted2, ...target} = source;
console.log(target); // `{ w1: 'val1', w2: 'val2' }` Exactly what you want
但是,副作用是,您的作用域现在被两个您从不关心使用的变量所污染:unwanted1
和unwanted2
如果\u
表示不在乎,您可以这样做
var {
unwanted1:_, // throw away
unwanted2:_, // throw away
target
} = source;
但是,在Javascript中,是一个正确的标识符。
如果以这种方式使用一次(不需要的:
),您将得到一个名为
的不需要的变量,这与目标背道而驰。
如果多次使用(如上所述),则会发出错误:
SyntaxError:标识符'.'已声明
我有没有办法扔掉不需要的构件/分解变量
当然,以下解决方案始终可用
var target = {
w1: source.w1,
w2: source.w2,
}
及
然而,只有当你克隆一个有很多参数的对象,并且只需要排除几个参数时,才可以用解构的方法来实现这一点。使用
,,,,或者只使用排除的方法::D哈哈
function prop(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
var source = {
w1: "val1",
w2: "val2",
unwanted1: "val3",
unwanted2: "val4"
};
var target = prop(source, ["unwanted1", "unwanted2"]);
函数属性(源代码,排除在外){
if(source==null)返回{};
var target={};
var sourceKeys=Object.keys(源);
var-key,i;
对于(i=0;i=0)继续;
目标[键]=源[键];
}
回报目标;
}
变量源={
w1:“val1”,
w2:“val2”,
unwanted1:“val3”,
unwanted2:“val4”
};
var target=prop(来源:[“unwanted1”、“unwanted2”);
使用\uu
、\u
、\u
或仅使用排除方法::D哈哈
function prop(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
var source = {
w1: "val1",
w2: "val2",
unwanted1: "val3",
unwanted2: "val4"
};
var target = prop(source, ["unwanted1", "unwanted2"]);
函数属性(源代码,排除在外){
if(source==null)返回{};
var target={};
var sourceKeys=Object.keys(源);
var-key,i;
对于(i=0;i=0)继续;
目标[键]=源[键];
}
回报目标;
}
变量源={
w1:“val1”,
w2:“val2”,
unwanted1:“val3”,
unwanted2:“val4”
};
var target=prop(来源:[“unwanted1”、“unwanted2”);
我有没有办法扔掉不需要的构件/分解变量
唯一不太可怕的方法是定义一个做同样事情的函数:
const clone = ({unwanted1, unwanted2, ...target}) => target;
const target = clone(source);
变量仍在创建中,但其可见性仅限于立即终止的函数
但是,只有在克隆具有多个参数的对象并且只需要排除几个参数的情况下,才使用分解结构进行此操作似乎是最干净的方法
上述方法的缺点是函数特定于特定对象。不能将其重新用于其他对象。当然,它很小,所以可能没什么大不了的。但是拥有一个更通用的helper函数可能更容易理解
我有没有办法扔掉不需要的构件/分解变量
唯一不太可怕的方法是定义一个做同样事情的函数:
const clone = ({unwanted1, unwanted2, ...target}) => target;
const target = clone(source);
变量仍在创建中,但其可见性仅限于立即终止的函数
但是,只有在克隆具有多个参数的对象并且只需要排除几个参数的情况下,才使用分解结构进行此操作似乎是最干净的方法
上述方法的缺点是函数特定于特定对象。不能将其重新用于其他对象。当然,它很小,所以可能没什么大不了的。但是有一个更通用的helper函数可能更容易理解。引入、、、、\uuuuuuuuuuuuu
等来删除1,2,3或更多属性并没有多大区别,因为它仍然会创建变量,“…您永远不会在意使用”而且,它可能会给代码添加一种意大利面条的味道
但是,由于需要显式地指示要删除的确切属性,可以考虑其他对象修剪技术,例如
- 过滤不需要的属性
const obj={prop1:1,prop2:2,prop3:3,prop4:4,prop5:5},
KeyStoreDrop=['prop2','prop3','prop4'],
trimmedObj=Object.fromEntries(
对象
.条目(obj)
.filter(([key,val])=>!keystrop.includes(key)
)
)
console.log(trimmedObj)
.as console wrapper{min height:100%;}
引入
、\uuuuuu
、\uuuuuuuuuuuu
等属性来删除1,2,3或更多属性并没有多大区别,因为它仍然会创建变量,“…您永远不会在意使用”,而且,它可能会给您的代码添加意大利面条的味道
但是,由于需要显式地指示要删除的确切属性,可以考虑其他对象修剪技术,例如
- 过滤不需要的属性
const obj={prop1:1,prop2:2,prop3:3,prop4:4,prop5:5},
KeyStoreDrop=['prop2','prop3','prop4'],
trimmedObj=Object.fromEntries(
对象
.条目(obj)
.filter(([key,val])=>!keystrop.includes(key)
)
)
console.log(trimmedObj)
.as控制台包装{min height:100%;}
什么abt:变量{unwanted1:uu,unwanted2:_u,…target}=source代码>什么abt:var{unwanted1:uu,unwanted2:_uu,…target}=source代码>