Javascript 迭代数组以返回数组的名称
更新 该类提供的Chai测试存在问题。无论如何,谢谢你的帮助 我正在为一个班做一道题。它要求我们编写一个名为“each”的函数,它应该为集合的每个元素调用迭代器(value、key、collection)。它应该遍历数组,提供对元素、索引和数组本身的访问。它还应该只迭代数组元素,而不是数组的属性(我遇到的另一个问题)。它还接受数组和对象 在我正在运行的测试中(在底部),它应该返回:Javascript 迭代数组以返回数组的名称,javascript,arrays,loops,Javascript,Arrays,Loops,更新 该类提供的Chai测试存在问题。无论如何,谢谢你的帮助 我正在为一个班做一道题。它要求我们编写一个名为“each”的函数,它应该为集合的每个元素调用迭代器(value、key、collection)。它应该遍历数组,提供对元素、索引和数组本身的访问。它还应该只迭代数组元素,而不是数组的属性(我遇到的另一个问题)。它还接受数组和对象 在我正在运行的测试中(在底部),它应该返回: ['ant', 'a', animals], ['bat', 'b', animals], ['cat', 'c'
['ant', 'a', animals],
['bat', 'b', animals],
['cat', 'c', animals]
然而,它正在返回:
['ant', '0', Array[3] [0:"ant", 1:"bat", 2:"cat"]]
…等等
如何迭代数组,使其返回列表名,而不是完整数组本身
var testeach = function(collection, iterator) {
if (Array.isArray(collection)) {
var len = collection.length;
for (var i in collection)
iterator(collection[i], collection.indexOf(collection[i]), collection);
} else {
for (var key in collection)
if (collection.hasOwnProperty(key)) {
iterator(collection[key], key, collection);
}
}
};
var animals = ['ant', 'bat', 'cat'];
var iterationInputs = [];
testeach(animals, function(animal, index, list) {
iterationInputs.push([animal, index, list]);
});
console.log(iterationInputs);
下面是使用Chai的测试代码
describe('each', function() {
it('should iterate over arrays, providing access to the element, index, and array itself', function() {
var animals = ['ant', 'bat', 'cat'];
var iterationInputs = [];
_.each(animals, function(animal, index, list) {
iterationInputs.push([animal, index, list]);
});
expect(iterationInputs).to.eql([
['ant', 0, animals],
['bat', 1, animals],
['cat', 2, animals]
]);
});
你不能这样做。它是一个变量标识符,除非你解析代码并得到相应的代码,否则你无法得到变量名。就JavaScript(可能还有你的课堂老师)而言,
数组[3][0:“ant”,1:“bat”,2:“cat”]
是动物。说它们可以互换使用并不完全正确,但就你的作业而言,情况可能就是这样
你可以把动物
想象成指向数组本身的路标(数组[3][0:“蚂蚁”,1:“蝙蝠”,2:“猫”]
)。因此,如果你的作业说它想要动物
,它可能只是被误导了,因为作业作者不想写出整个数组。确保你正确地阅读和理解了问题。可能您对所需输出的解释不正确。“动物”这个词周围没有字符串引号…谢谢,内特。我直接从单元测试中提取所需的输出。它肯定需要输入数组的变量名。在这个例子中,提供了数组动物。啊,好吧,它不是在寻找名称,它是在寻找数组中的数组是否相同。我的意思是,它不是在寻找字符串“动物”,它是在寻找每个数组中的最后一个元素(例如,['ant',0,**animals**]
)是否具有相同的项(['ant',bat cat']
)正如测试中所定义的那样(var-anists…
行),它恰好使用了与代码中相同的变量名。换句话说,假设Chai的eql
方法对数组进行了深入比较,测试应该通过。这就是我的想法!但是这个赋值通过使用Chai的单元测试来检查代码。考试一直不及格。它说,expect(iterationput).to.eql([['ant',0,动物],'bat',1,动物],'cat',2,动物])@卡罗琳·康姆斯看起来就是证明。它没有说eql([['ant',0,'animals',…])
。请注意,动物
部分周围没有引号<代码>动物
在单元测试的上下文中是一个变量,可能指向在链的高层定义的数组。@JosephMarikle这是有道理的,但测试仍然失败。我在上面提供了测试代码。有没有想过为什么它仍然失败?@CarolynCommons-Hm。。。现在我再仔细看看,它可能是“索引”部分。你的代码返回了你说的'ant',a',Array[3][…”
。它不是应该返回'ant',0,Array[3][…
?注意0
代替a
哦,我刚刚输入了错误。修复了上面的问题。它确实返回了'ant',0,Array[3][…并不是有意让你困惑!返回字符串“动物"
不是这里所需要的。@vlaz但OP在问题上说:如何迭代数组,使其返回列表名,而不是完整的数组本身?。你从引号中理解了什么?如果你找到问题的另一个含义,我可以修正我的答案。。根据针对OP中发布的输出运行的单元测试,t参数应该是数组本身。这也与JavaScript中的forEach
的行为完全一致,其中传递给函数的第三个参数是操作的数组。我完全理解这句话,但很明显,OP提出的是XY问题。@vlaz你是对的。顺便说一句,我对drop没有把握ping整个答案,或者只保留原始答案而不使用变通方法…是的,我认为这很好。虽然它不能提供OP问题的具体答案,但我认为提及AST解析仍然很有价值。