检查推送项

时间:2017-09-15 14:25:55

标签: javascript angularjs arrays

下面是我通过检查项目是否已经存在而推入VacanciesWithSavedSearches数组的示例代码。

 if ($scope.VacanciesWithSavedSearches.indexOf(value) == -1) {

            $scope.VacanciesWithSavedSearches.push({
                type: "Saved Searches",
                title: value.title,
                value: value.id
            });
        }

如何通过将indexOf替换为实际属性值来更改上述内容,例如,如果列表中不包含其他item,则将项目添加到列表VacanciesWithSavedSearches.id = 123

3 个答案:

答案 0 :(得分:1)

您可以使用array.some:

如果Ecmascript6不是问题:

var id = 123;
if (!$scope.VacanciesWithSavedSearches.some(vac => vac.id === id)) {
    $scope.VacanciesWithSavedSearches.push({
         type: "Saved Searches",
         title: value.title,
         value: id
     });
 }

使用Ecmascript5,您可以像下面这样做:

var id = 123;
if (!$scope.VacanciesWithSavedSearches.some(function(vac) { return vac.id === id; })) {
    $scope.VacanciesWithSavedSearches.push({
         type: "Saved Searches",
         title: value.title,
         value: id
     });
 }

答案 1 :(得分:0)

使用array.filter

var result = $scope.VacanciesWithSavedSearches.filter(t=t.id ==='123');
if(result.length === 0)
{
  $scope.VacanciesWithSavedSearches.push({
     type: "Saved Searches",
     title: value.title,
     value: value.id
   });          

}

答案 2 :(得分:0)

如果您的数组是一个数字或基元数组,您可以.indexOf(value) == -1但它是一个对象数组,因此您无法使用.indexOf()方法对其进行测试,您可以使用 {{ 3}} 方法来测试数组中对象的存在。

  

some()方法测试数组中至少有一个元素是否通过了由提供的函数实现的测试。

这应该是你的代码:

if (!$scope.VacanciesWithSavedSearches.some(function(v){return v.value.id === -1})) {
     $scope.VacanciesWithSavedSearches.push({
          type: "Saved Searches",
          title: value.title,
          value: value.id
     });
}