Javascript 迭代数组以返回数组的名称

Javascript 迭代数组以返回数组的名称,javascript,arrays,loops,Javascript,Arrays,Loops,更新 该类提供的Chai测试存在问题。无论如何,谢谢你的帮助 我正在为一个班做一道题。它要求我们编写一个名为“each”的函数,它应该为集合的每个元素调用迭代器(value、key、collection)。它应该遍历数组,提供对元素、索引和数组本身的访问。它还应该只迭代数组元素,而不是数组的属性(我遇到的另一个问题)。它还接受数组和对象 在我正在运行的测试中(在底部),它应该返回: ['ant', 'a', animals], ['bat', 'b', animals], ['cat', 'c'

更新

该类提供的Chai测试存在问题。无论如何,谢谢你的帮助

我正在为一个班做一道题。它要求我们编写一个名为“each”的函数,它应该为集合的每个元素调用迭代器(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]
        ]);
      });

你不能这样做。它是一个变量标识符,除非你解析代码并得到相应的代码,否则你无法得到变量名。

就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解析仍然很有价值。