javascript - 循环遍历 javascript 对象的集合
问题描述
我试图只读取朋友数组的第一个元素并将其添加到每个对象的匹配数组中。如果我直接在对象上添加匹配属性。然后它返回预期的结果。但是如果我使用函数 addmatches 来添加匹配数组属性。然后每个动物对象的匹配数组值都相同。
var AnimalCreator = function(username, species, tagline, noises) {
var friends = [];
//var matches = [];
return {
username: username,
species: species,
tagline: tagline,
noises: noises,
friends: friends,
//matches: matches
}
};
var sheep = AnimalCreator('Cloud', 'sheep', 'You can count on me!', ['baahhh', 'arrgg', 'chewchewchew']);
var rabbit = AnimalCreator('Sky', 'Rabbit', 'I like jumping!', ['haha', 'heehee']);
var tiger = AnimalCreator('Tim', 'Tiger', 'I am strong!', ['Grrrr', 'grrrrrr!']);
var bear = AnimalCreator('Poo', 'Bear', 'I am your friend', ['wowo', 'whwhwh']);
var addFriend = function(animal, friend) {
animal.friends.push(friend.username);
};
addFriend(sheep, rabbit);
addFriend(sheep, tiger);
addFriend(tiger, bear);
var myFarm = [sheep, rabbit, tiger, bear];
var addmatches = function(farm){
var matches = [];
for(var i=0;i < farm.length; i++){
farm[i].matches = matches;
}
};
addmatches(myFarm);
var giveMatches = function(farm) {
for (var i = 0; i < farm.length; i++) {
if (farm[i].friends.length > 0) {
farm[i].matches.push(farm[i].friends[0]);
}
}
};
giveMatches(myFarm);
console.log(myFarm);
解决方案
matches
是对空数组的引用,并且您的代码为每个farm
对象(farm[i].matches = matches;
)分配了相同的引用,您可以尝试直接分配空数组,例如
farm[i].matches = [];
您注释的代码:该函数AnimalCreator
在每次调用时创建一个新的数组实例,并且每个animal
对象都引用一个唯一的数组,这就是为什么当您直接添加时matches
,它按预期工作。
希望这会有所帮助!
推荐阅读
- jquery - 检查表行中的第一个或最后一个兄弟姐妹(jQuery)
- html - 基于设计的元素垂直定位的最佳方法
- powershell - 格式化 ConvertTo-HTML 报告并将每个值的计数添加为 precontent
- dataframe - 使用 Pyspark (databricks) 连接两个表和连接列
- flutter - 当值仅为 true 时如何使用 ColorFilter?
- ios - 如何获取不同设备尺寸上的视图相对位置
- android - 加急工作请求需要 ListenableWorker 来提供 getForegroundInfoAsync() 的实现
- python - 为什么它不能在 python 中导入跟踪
- .net - CannotResolveClassInfoException:无法解析类型的 ClassInfo
- c - 数据结构:中缀到前缀 LinkedList(LL)