Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6处理剩余的对象分解(对象修剪)_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6处理剩余的对象分解(对象修剪)

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

当与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 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