如何在javascript中迭代链表

2023-12-08

有人分享了这种从数组创建链接列表的美丽而优雅的方法。

function removeKFromList(l, k) {
  let list = l.reduceRight((value, next)=>({next, value}), null);
  console.log(list);
}

let l = [3, 1, 2, 3, 4, 5];
let k = 3;

removeKFromList(l, k);

迭代数组(for、filter、map、reduce 等)非常容易,但链表没有这些功能。我需要迭代以从列表中删除 k 值。我猜我需要为当前节点创建一个变量并使用 while 循环,但没有关于此的文档。我见过一些 repl 代码这样做,但它似乎不必要地复杂。

如何在 javascript 中迭代链表?


首先,虽然使用reduce的想法确实很美,但我必须说结果不太好,因为结果节点有一个值为“next”的字段和一个值为“next”的字段“value”,即它们被交换。那么让我们解决这个问题:

function removeKFromList(l, k) {
    let list = l.reduceRight((value, next)=>({value: next, next: value}), null);
    console.log(list);
}

其次,该函数的名称很糟糕,它应该命名为“arrayToLinkedList”或更具暗示性的名称。另外,记录结果没有意义,我们应该返回它。此外,参数 k 根本没有被使用。修复这些问题:

function arrayToLinkedList(array) {
    return array.reduceRight((prev, cur) => ({ value: cur, next: prev }), null);
}

现在,让我们研究如何迭代它。你怎么认为?我会给出一些提示,因为直接给出答案可能不会帮助你学到很多东西:

观察链表本身是:

  • 要么是值null, or
  • 一个具有两个字段的普通对象,一个字段“value”可以是任何内容,一个字段“next”是一个链接列表。

请注意,上述(递归)定义是明确定义的并且涵盖了所有情况。

现在,用它来帮助你。你如何获得第一个值?那将是简单的myList.value, 正确的?现在我如何获得第二个值?通过应用.next,我们得到下一个链表,依此类推。如果next为空,你知道你必须停止。

如果您需要进一步的帮助,请告诉我。


EDIT:我注意到您正在寻找正确的方法来在列表上创建迭代方法,并带有“将其添加到原型”之类的想法。那么,关于这一点:

要通过原型添加实例方法,您需要链接列表是一个类。这将过于复杂,除非您确实有充分的理由为此定义一个类(这将围绕它创建多个方法和实用程序)。

在我看来,最好只定义一个函数,将一个链表作为第一个参数,将回调函数作为第二个参数,类似于 lodash 的.each:

function forEachValueInLinkedList(linkedList, callback) {
     // here you loop through all values and call
     // callback(value)
     // for each value.
}

我想说这将是最“javascriptic”的方式来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在javascript中迭代链表 的相关文章

  • Angular - 如何从 DOM 中删除我使用过 $compile 的元素?

    我需要的是两个 ng views 的功能 因为我不能 我想更改某些内容的innerHTML 并编译它 我遇到的问题是 当我再次更改内容时 我可以编译 但是 Angular 是否会自行删除绑定 或者我必须手动执行此操作 如果是这样 怎么办 编
  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

  • 是什么原因造成的,当数值大于一定位数时,结果会不同呢?

    非常抱歉 在尝试完所有案例之前 我急忙发邮件向大家说声抱歉 根据你的回答 我尝试并推翻了之前的想法 随着位数的变化 我很困惑 我没有测试多少位数字是正常的 但我相信这个例子应该可以解释 字符串类型与数字类型比较时 当位数大于一定值时 只返回
  • -replace 不将字符串替换为“()”

    我正在尝试在 PowerShell 中替换包含括号的字符串 但是 当我尝试这样做时 它不起作用 知道我哪里出错了吗 我应该做什么来替换包含的字符串 with replace在 PowerShell 中 a Some Text with ro
  • 声明结构体字段对象类型时,我必须在这里使用什么样的生命周期参数

    这就是我的代码的样子 我正在尝试在我的内部使用一个实现的结构ShapeRenderer构造并使用它的方法 形状 rs use super core pub struct ShapeRenderer lt a gt core renderer
  • 添加数据时ng-repeat不更新列表

    我的问题是 ng repeat 不会自动更新数据 当我在代码中按添加引脚时 该元素会正确添加到数据库中 如果我重新加载页面 数据会正确显示 但不会像角度那样显示 据记录 更新和删除工作正常 提前致谢 这是我的 app js 代码 var a
  • ASP.NET MVC3 - 使用 Javascript 的错误

    我正在尝试使用 Ajax BeginForm 从我的控制器发布 Json 结果 我正在使用 MVC3 当 Json 结果被调用时 它应该被发送到 javascript 函数并使用提取对象 var myObject content get r
  • 显示优惠券说明 woocommerce

    我试图在购物车页面应用优惠券 10 后显示优惠券描述 要显示总计 我正在使用 woocommerce gt cart gt cart contents total 如何显示优惠券说明 由于你没有提到你想要在哪里有优惠券说明 我之前已经打印了
  • 聚合数据帧列表并存储所有结果

    我有 9 个数据框的列表 每个数据框大约有 100 行和 5 6 列 我想根据所有数据帧中另一个列中指定的组来聚合列中的值 并将所有结果存储在单独的数据框中 为了阐明这一点 请考虑一个列表 1 Date Group Age Nov A 13
  • Hibernate 不会完全刷新实体子级

    我使用 Hibernate 5 1 0 Final 我的GenericDAO类主要方法 public T save T entity entityManager getTransaction begin entityManager pers
  • 如何删除 Symfony 2.7 中的弃用警告?

    Symfony 在日志和控制台中输出了可怕的 自 2 6 版本以来已弃用 并将在 3 0 中删除 错误 我遵循了我发现的所有声称可以解决该问题的指南 包括升级 sensio distribution bundle 并将 E USER DEP
  • 是否可以重新加载相同的 FXML/Controller 实例?

    Goal Implement a standard Settings GUI window Categories in a ListView on the left and the corresponding options in a Pa
  • OpenGL 打包正常

    我试图理解使用之间的区别GL INT 2 10 10 10 REV对于我的数据的正常情况 V S GLbyte 目前我正在将法线加载到glm vec4我这样包装它 int32 t floatToSignedNormalizedByte fl
  • 如何更改视频播放速度

    我想知道是否可以在 iPhone 应用程序中更改视频播放速度 我们希望用户对着麦克风大喊以加快播放速度并结束 您必须使用 setCurrent PlaybackRate
  • 在 Facebook 或 Twitter 授权后存储和检索用户收到的令牌

    您好 我目前正在尝试编写一个 MVC5 应用程序 该应用程序能够在通过 facebook 或 twitter 授权后存储用户收到的令牌 我想将其存储在数据库中而不是 cookie 中 并在用户将来的任何 API 请求和登录尝试中使用它 这样
  • 如何找到可见MKMapView可见屏幕区域的半径?

    我想知道iPhone屏幕中可见区域的半径 因为我会缩小和放大可见区域会发生变化 所以我想知道该特定区域的半径 我该怎么做 它不是所需的半径 您需要使用mapView 中的region 参数 查一下苹果文档 里面说的很清楚了 完成本教程 它会
  • 如何限制 Android Google 自动完成 API 仅获取火车站

    尽管有很多关于如何将 API 限制为特定国家 地区的答案 但找不到任何有关将其限制为火车站的信息 请帮我解决这个问题 谢谢 我认为目前 API 不支持此功能 我可以在 Places API Web 服务中看到启用此功能的功能请求 https
  • 在 numpy 数组中查找相同的行和列

    我有一个 nxn 元素的布尔数组 我想检查是否有任何行与另一行相同 如果有任何相同的行 我想检查相应的列是否也相同 这是一个例子 A np array 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 0
  • 三元运算符比 Java 中的“if”条件更快吗?

    这个问题在这里已经有答案了 我很容易出现 如果条件综合症 这意味着我倾向于一直使用 if 条件 我很少使用三元运算符 例如 I like to do this int a if i 0 a 10 else a 5 When I could
  • 无法通过 Google Apps 脚本中的 YouTube 数据 API 从云端硬盘上传:空响应

    我正在尝试将文件列表从 Google 云端硬盘导入到 YouTube 元数据和文件的 URL 位于 Google 电子表格中 因此我使用 Google Apps 脚本编写了一些代码 该代码执行以下操作 获取选定的行 检索标题 描述 Goog
  • 使用 pyparsing 匹配非空行

    我正在尝试制作一个使用的小应用程序pyparsing从另一个程序生成的文件中提取数据 这些文件具有以下格式 SOME KEYWORD line 1 line 2 line 3 line 4 ANOTHER KEYWORD line a li
  • 如何在javascript中迭代链表

    有人分享了这种从数组创建链接列表的美丽而优雅的方法 function removeKFromList l k let list l reduceRight value next gt next value null console log