更新
班级提供的Chai测试存在问题。非常感谢您的帮助!
我正在为一个班级解决问题。它要求我们编写一个名为“each”的函数。它应该为集合的每个元素调用iterator(value,key,collection)。它应该遍历数组,提供对元素,索引和数组本身的访问。它也应该只迭代数组元素,而不是数组的属性(我遇到的另一个问题)。它还接受数组和对象。
在我正在运行的测试中(在底部),它应该返回:
['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]
]);
});
答案 0 :(得分:4)
你不能这样做。它是一个变量标识符,除非您解析代码并获得abstract syntax tree,否则无法获取变量名称。
答案 1 :(得分:4)
就JavaScript(可能还有您的班级讲师)而言,Array[3] [0:"ant", 1:"bat", 2:"cat"]
是 animals
。说它们可以互换使用并不完全正确,但就你的任务而言,可能就是这种情况。
您可以将animals
视为指向数组本身的路标(Array[3] [0:"ant", 1:"bat", 2:"cat"]
)。因此,如果你的任务表明它想要animals
,那么可能只会被误导,因为作业编写者不想写出整个数组。