迭代多个列表并将每个列表项的元素传递给方法

时间:2018-02-08 13:02:43

标签: javascript angularjs

我正在使用angularjs迭代列表。我有两个列表对象,我想迭代并获取值并将其传递给方法。

我想要list1的第一个元素和list1的list2.second元素的第一个元素以及list2的第二个元素。

演示:https://plnkr.co/edit/tg7A6VVySu6hlb6hR06F?p=preview

在下面的代码中,我有$ scope.list和$ scope.itemsPurchased。

当我打印console.log(firstName + " -- " + item);时我期望的值如下:

 Joe -- laptop
Mishal -- fridge
Dex -- AC
Rayan -- Mobile
Riyya -- Heater

js code:

app.controller("BaseController", function($scope) { 
  $scope.title = "Angular.ForEach";
  $scope.list = [
    {firstname: 'Joe', lastname: 'Michael'},
    {firstname: 'Mishal', lastname: 'A'},
    {firstname: 'Dex', lastname: 'T'},
    {firstname: 'Rayan', lastname: 'K'},
    {firstname: 'Riyya', lastname: 'R'}
  ];

  $scope.itemsPurchased = [
    {item: 'laptop'},
    {item: 'fridge'},
    {item: 'AC'},
    {item: 'Mobile'},
    {item: 'Heater'}
  ]; 
        var i;
         angular.forEach($scope.list, function (value, key) {
           i=1;
        var firstName = JSON.stringify(value.firstname);
        angular.forEach($scope.itemsPurchased, function (value) {
            var item = JSON.stringify(value.item, value.value);
             console.log(firstName + "  item : " + item);
             //method call
             //showData(firstName,item);
        });
    }); 
});

任何建议,与我的代码一样,每个名称都会映射到项目中的每个元素。在我的列表中,我没有任何要比较的ID

4 个答案:

答案 0 :(得分:0)

你有什么理由不能使用简单的吗?

for (let i = 0; i < list1.length; i++) {
    doSomethingWith(list1[i], list2[i]);
}

答案 1 :(得分:0)

由于两个列表都是并行数组,因此您只需要遍历一个。指数将是相同的。你感到困惑的地方是你试图遍历它们。

var i = 0;
angular.forEach($scope.list, function (value, key) {

 console.log(value.firstname + "  item : " + $scope.itemsPurchased[i].item);
 i++;
});

答案 2 :(得分:0)

你可以这样做:

angular.forEach($scope.list, function (item, index) {
   var firstName = item.firstname;
   console.log(firstName + " -- " + $scope.itemsPurchased[index].item);
});

答案 3 :(得分:0)

我认为,为了帮助你,我需要更多关于你想要达到的目标的背景。另一方面,您保存(本地或数据库)客户数据和购买物品的方式有点不一致。为什么使用JSON.stringify来获取列表值?

但是根据你的代码并假设两个列表总是具有相同的长度(就像我说的漂亮的魔术编程:D)你需要使用for循环两个列表并执行以下操作:

for(let i=0; i<list.lenth; i++){ 
    const customerName = $scope.list[i];
    const item = $scope.itemsPurchased[i];
    showData({customerName, item});

}
const showData = ({customerName, item}) => {
    console.log(`${customerName} -- ${item}`);
}

但正如我所说,尝试重构一下你的代码。