Ecmascript 6 rest参数与对象的用法

Ecmascript 6 rest参数与对象的用法,ecmascript-6,parameter-passing,Ecmascript 6,Parameter Passing,我试图通过传递一些对象值作为rest参数来获取用户信息。每当我试图传递2个参数时,代码就会抛出一个错误(未定义)。我错过了什么 这里是我正在尝试做的链接 让用户地址=[{ “街道”:“someStreet1”, “房子”:“1”, “person”:“User1” }, { “街道”:“someStreet2”, “房子”:“2”, “person”:“User2” }, { “街道”:“someStreet3”, “房子”:“3”, “person”:“User3” }]; 让userInf

我试图通过传递一些对象值作为rest参数来获取用户信息。每当我试图传递2个参数时,代码就会抛出一个错误(未定义)。我错过了什么

这里是我正在尝试做的链接

让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让userInfo=[];
让addressToCheck=(…newUserHouse)=>{
for(用户地址的let地址){
if(newUserHouse==地址.house){
userInfo.push(地址.人);
console.log(userInfo);
}
}
}

日志(addressToCheck(3,2))代码不会抛出
未定义的
错误,它只是记录值
未定义的
。这是因为您正在调用
console.log
,对
addressToCheck
的返回值执行操作,但该函数不返回值,因此它隐式返回
undefined
。看


但是,您的代码还有更多的问题。由于使用松散比较(
==
),只有在传递单个参数时它才会意外工作

rest参数的值始终为数组。这意味着您正在进行以下比较:

[1, 2] == "1"
[1, 2] == "2"
[1, 2] == "3"
我希望这是显而易见的为什么不能工作。具有多个元素的数组不能等于单个“元素”,因此永远不会满足
if
条件

由于
[1]
的字符串表示形式仅为
“1”
,因此它会意外地使用单个参数。但是,如果
[1,2]
的字符串表示形式是
“1,2”

您没有解释所需的结果是什么,但如果要为提供的输入选择所有地址,则应使用
.filter
。您可以将提供的参数转换为一个集合,以便快速查找

只需从函数返回结果,而不是将值赋给“外部”数组

让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让addressToCheck=(…newUserHouse)=>{
newUserHouse=新集合(newUserHouse);
返回userAddress.filter(address=>newUserHouse.has(address.house));
};

控制台日志(addressToCheck(“3”,“2”))代码不会抛出
未定义的
错误,它只是记录值
未定义的
。这是因为您正在调用
console.log
,对
addressToCheck
的返回值执行操作,但该函数不返回值,因此它隐式返回
undefined
。看


但是,您的代码还有更多的问题。由于使用松散比较(
==
),只有在传递单个参数时它才会意外工作

rest参数的值始终为数组。这意味着您正在进行以下比较:

[1, 2] == "1"
[1, 2] == "2"
[1, 2] == "3"
我希望这是显而易见的为什么不能工作。具有多个元素的数组不能等于单个“元素”,因此永远不会满足
if
条件

由于
[1]
的字符串表示形式仅为
“1”
,因此它会意外地使用单个参数。但是,如果
[1,2]
的字符串表示形式是
“1,2”

您没有解释所需的结果是什么,但如果要为提供的输入选择所有地址,则应使用
.filter
。您可以将提供的参数转换为一个集合,以便快速查找

只需从函数返回结果,而不是将值赋给“外部”数组

让用户地址=[{
“街道”:“someStreet1”,
“房子”:“1”,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:“2”,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:“3”,
“person”:“User3”
}];
让addressToCheck=(…newUserHouse)=>{
newUserHouse=新集合(newUserHouse);
返回userAddress.filter(address=>newUserHouse.has(address.house));
};

控制台日志(addressToCheck(“3”,“2”))在我的代码中,我忽略了一点,即rest参数是一个参数数组,为了操作它们,我们也必须对它们进行迭代

让用户地址=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:2,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:3,
“person”:“User3”
}]
让addressToCheck=(…房屋)=>{
出租房屋{
for(让用户使用userAddress){
如果(user.house==房屋){
console.log(用户);
打破
}
}
}
}

日志(addressToCheck(1,3))在我的代码中,我忽略了一点,即rest参数是一个参数数组,为了操作它们,我们也必须对它们进行迭代

让用户地址=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”:2,
“person”:“User2”
}, {
“街道”:“someStreet3”,
“房子”:3,
“person”:“User3”
}]
让addressToCheck=(…房屋)=>{
出租房屋{
for(让用户使用userAddress){
如果(user.house==房屋){
console.log(用户);
打破
}
}
}
}

日志(addressToCheck(1,3))使用ES6实现这一点的一种功能性方法是在自定义函数中使用数组的和方法(即
GetUsersMatchingHouseNumber
),如下要点所示:

const userData=[{
“街道”:“someStreet1”,
“房子”:1,
“person”:“User1”
}, {
“街道”:“someStreet2”,
“房子”: