查找角度数组中是否存在实例?

时间:2015-03-25 14:34:00

标签: arrays angularjs

我创建了一个购物车页面,当单击按钮时,该页面会将有关产品的信息添加到数组中。我希望能够搜索购物车数组,如果已经添加了该产品,请增加它的数量。

所以我有这样的事情: $ scope.cartItems = [];

$scope.updateCart = function(product) {
    var found = $filter('filter')($scope.cartItems, {title: product.title}, true);
    if (found.length) {
     //This is where i'm not sure what to do
    } else {
        $scope.addToCart(product);
    };
};

$scope.addToCart = function(product) {
    $scope.cartItems.push({
        title: product.title,
        image: product.image,
        thumb: product.thumb,
        price: product.price,
        id: product.id,
        quantity: 1
    });
};

});

1 个答案:

答案 0 :(得分:1)

我建议在使用Arrays \ Collections时考虑使用lodash \ underscore,两个很棒的模块可以让你的生活更轻松。

我认为按标题查找项目并不是唯一的(考虑使用ID),但这是您的选择,这是您可以使用underscore轻松实现它(下面没有下划线的另一个选项)。

定义下划线:

var underscore = angular.module('underscore', []);
    underscore.factory('_', function() {
        return window._; // assumes underscore has already been loaded on the page
    });  

// Declare it as a dependency of your module
var app = angular.module('app', ['underscore']);

// And then inject it where you need it
app.controller('Ctrl', function($scope, _) {
});

控制器:

$scope.updateCart = function(product) {
   var index = _.findIndex($scope.cartItems, {title: product.title});
    if (index != -1) {
        $scope.cartItems[index].quantity++;
    } else {
        $scope.addToCart(product);
    };
};

$scope.addToCart = function(product) {
    $scope.cartItems.push({
        title: product.title,
        image: product.image,
        thumb: product.thumb,
        price: product.price,
        id: product.id,
        quantity: 1
    });
};
});

如果没有下划线,可以这样做:

var index= $scope.cartItems.map(function(x) {return x.title; }).indexOf(titleYouLookFor);

 if (index != -1) {
            $scope.cartItems[index].quantity++;
        } else {
            $scope.addToCart(product);
        };