Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 如何将元素推送到数组中而不重复其中的非元素?_Javascript_Arrays_Angularjs_Lodash - Fatal编程技术网

Javascript 如何将元素推送到数组中而不重复其中的非元素?

Javascript 如何将元素推送到数组中而不重复其中的非元素?,javascript,arrays,angularjs,lodash,Javascript,Arrays,Angularjs,Lodash,我必须让你更容易理解。如您所见,我正在从一个数组中选择一些元素,并将这些元素推送到另一个名为$scope.favoriteAgue=[]的数组中为了制作联盟的收藏夹列表,在该视频中,我按任意次数推送该元素,我不希望这样,我希望能够只选择一次列表中的每个元素,如果用户尝试选择已在收藏夹数组中的元素,则会显示一条消息 我使用的是lodash和angular,这是代码: $scope.favoriteLeague = []; $scope.addToFavorites = function(lea

我必须让你更容易理解。如您所见,我正在从一个数组中选择一些元素,并将这些元素推送到另一个名为
$scope.favoriteAgue=[]的数组中
为了制作联盟的收藏夹列表,在该视频中,我按任意次数推送该元素,我不希望这样,我希望能够只选择一次列表中的每个元素,如果用户尝试选择已在收藏夹数组中的元素,则会显示一条消息

我使用的是
lodash
angular
,这是代码:

$scope.favoriteLeague = []; 

$scope.addToFavorites = function(league) {

   $scope.favoriteLeague.push(league);

};
html


{{league.name}

只需检查阵列是否包含联盟,然后再推送它

$scope.addToFavorites = function(league) {

    $scope.favoriteLeague.indexOf(league) === -1 ? $scope.favoriteLeague.push(league) : void 0;

};

在推进之前,只需检查阵列是否包含联盟

$scope.addToFavorites = function(league) {

    $scope.favoriteLeague.indexOf(league) === -1 ? $scope.favoriteLeague.push(league) : void 0;

};

您应该检查它是否不在数组中@它本可以离船很近,但它应该是
=-1
而不是
!==-1

$scope.addToFavorites = function(league) {

    if ($scope.favoriteLeague.indexOf(league) === -1){
        $scope.favoriteLeague.push(league);
    }

};

您应该检查它是否不在数组中@它本可以离船很近,但它应该是
=-1
而不是
!==-1

$scope.addToFavorites = function(league) {

    if ($scope.favoriteLeague.indexOf(league) === -1){
        $scope.favoriteLeague.push(league);
    }

};
.indexOf()
方法可能就是您想要的。在调用
addToFavorites
的代码中使用以下代码(这样,如果该值已经存在,您甚至不调用该函数):

或者,如果您使用jQuery,您可以使用
$.inArray()
方法来做同样的事情。

您可能正在寻找
.indexOf()
方法。在调用
addToFavorites
的代码中使用以下代码(这样,如果该值已经存在,您甚至不调用该函数):


或者,如果您使用jQuery,您可以使用
$.inArray()
方法来做同样的事情。

事实上,我基于@itcouldevenbeaboat answers获得了自己的解决方案

$scope.addToFavorites = function(league) {
  if ($scope.favoriteLeague.indexOf(league) === -1) {
    $scope.favoriteLeague.push(league);
  }else {
    console.log('already exists!!!!!');
  }
};

事实上,我根据@itcouldenbeapoat答案得到了自己的解决方案

$scope.addToFavorites = function(league) {
  if ($scope.favoriteLeague.indexOf(league) === -1) {
    $scope.favoriteLeague.push(league);
  }else {
    console.log('already exists!!!!!');
  }
};


在调用
.push()
之前,可以查看数组中是否已经包含
league
?可以使用
.indexOf()
?在调用
.push()
之前,可以查看数组中是否已经包含
league
?可能使用
.indexOf()
?当实际上只有一个结果操作时,为什么要使用三元?如果,为什么不直接使用
?实际上我是这样做的,现在它不允许选择anything@talemyn你能告诉我怎么做吗?只是一个代码示例,抱歉,但我没有理解您的原因是此代码不工作是因为它正在检查错误的条件<代码>!==-1
表示它存在于数组中,因此只有当联盟已经在列表中时,代码才会触发。如果列表是空的,它就永远不会开火。检查必须是
=-1
,这意味着联盟不在数组中。@talemyn因为三元语句让其他程序员知道你是老板。。。尽管事实上,正如你的评论所指出的,很容易混淆这些条件。当实际上只有一个结果操作时,为什么使用三元呢?如果,为什么不直接使用
?实际上我是这样做的,现在它不允许选择anything@talemyn你能告诉我怎么做吗?只是一个代码示例,抱歉,但我没有理解您的原因是此代码不工作是因为它正在检查错误的条件<代码>!==-1
表示它存在于数组中,因此只有当联盟已经在列表中时,代码才会触发。如果列表是空的,它就永远不会开火。检查必须是
=-1
,这意味着联盟不在数组中。@talemyn因为三元语句让其他程序员知道你是老板。。。尽管正如您的评论所指出的那样,很容易混淆条件这一点可能是错误的,因为indexOf返回-1 for not found,其计算结果为true(try
!!-1
)。另外,如果排名第一,indexOf返回0,计算结果为false。编辑答案后,我的评论现在是错误的。不管怎么说,这真是一团糟。我只是请求你们为我道歉,谢谢你们所有人的帮助@martinczerwiThis这一个可能是错误的,因为indexOf返回-1 for not found,其计算结果为true(请尝试
!!-1
)。另外,如果排名第一,indexOf返回0,计算结果为false。编辑答案后,我的评论现在是错误的。不管怎么说,这真是一团糟。我只是请求你们原谅我,谢谢你们所有人的帮助@martinczerwi