如何制作 _.includes 方法

我是一名初级开发人员,已经编写了 4 周的代码。


我正在研究一种 JavaScript 方法。


我将向您展示我首先使用的代码。



_.each = function (collection, iteratee) {

  if(Array.isArray(collection)===true){

    for(let i=0;i<collection.length;i++){

      iteratee(collection[i],i,collection)

    }

  }else{

  let objvalues= Object.values(collection)

  let objkeys = Object.keys(collection)

  for(let i=0;i<objvalues.length;i++){

    iteratee(objvalues[i],objkeys[i],collection)

  }

}

};

_.includes = function (arr, target) {

    let result

    _.each(arr, function(a){

      if(a === target) 

        result = true

      if (a !== target)

        result = false

      

    })

    return result;

};

这是一个条件。


如果 _.include 方法匹配数组中元素找到的值,则必须返回 true。


如果数组中的元素与您要查找的值不匹配,则必须返回 false。


我制作了 _include 方法。


如果数组中的元素与你要找的值不匹配,则返回false成功。一万


如果数组中的元素与要查找的值匹配,则必须返回 true


这就是你失败的地方。


好像不能返回ture,只返回false。


我该如何处理?


繁花不似锦
浏览 115回答 1
1回答

慕姐4208626

问题在这里:_.each(arr, function(a){&nbsp; if(a === target)&nbsp;&nbsp; &nbsp; result = true&nbsp; if (a !== target)&nbsp; &nbsp; result = false})您result在每次迭代时重新分配。因此,对最终值重要的唯一迭代result是最后一次迭代。相反,初始化result为false,并true在找到目标时重新分配给:const _ = {};_.each = function(collection, iteratee) {&nbsp; if (Array.isArray(collection) === true) {&nbsp; &nbsp; for (let i = 0; i < collection.length; i++) {&nbsp; &nbsp; &nbsp; iteratee(collection[i], i, collection)&nbsp; &nbsp; }&nbsp; } else {&nbsp; &nbsp; let objvalues = Object.values(collection)&nbsp; &nbsp; let objkeys = Object.keys(collection)&nbsp; &nbsp; for (let i = 0; i < objvalues.length; i++) {&nbsp; &nbsp; &nbsp; iteratee(objvalues[i], objkeys[i], collection)&nbsp; &nbsp; }&nbsp; }};_.includes = function(arr, target) {&nbsp; let result = false;&nbsp; _.each(arr, function(a) {&nbsp; &nbsp; if (a === target)&nbsp; &nbsp; &nbsp; result = true&nbsp; })&nbsp; return result;};console.log(&nbsp; _.includes([1, 2, 3], 2));找到匹配项后打破循环会更干净,但您_each没有为此设置:const _ = {};_.each = function(collection, iteratee) {&nbsp; if (Array.isArray(collection) === true) {&nbsp; &nbsp; for (let i = 0; i < collection.length; i++) {&nbsp; &nbsp; &nbsp; iteratee(collection[i], i, collection)&nbsp; &nbsp; }&nbsp; } else {&nbsp; &nbsp; let objvalues = Object.values(collection)&nbsp; &nbsp; let objkeys = Object.keys(collection)&nbsp; &nbsp; for (let i = 0; i < objvalues.length; i++) {&nbsp; &nbsp; &nbsp; iteratee(objvalues[i], objkeys[i], collection)&nbsp; &nbsp; }&nbsp; }};_.includes = function(arr, target) {&nbsp; for (const a of arr) {&nbsp; &nbsp; if (a === target)&nbsp; &nbsp; &nbsp; return true&nbsp; }&nbsp; return false;};console.log(&nbsp; _.includes([1, 2, 3], 2));

慕斯709654

除了CertainPerfomance已经说过的,你可以看看Array.includes是如何实现的以获得灵感,这里是来自TC39的规范。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript