我正在使用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 。
答案 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}`);
}
但正如我所说,尝试重构一下你的代码。