查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径
问:JavaScript 如何查找对象中某个 value 并返回路径上所有的 key?
let obj = {
key1: 'str1',
key2: {
key3: 'str3'
},
key4: {
key5: {
key6: 'str6',
key7: 'str7'
},
key8: 'str8'
},
key9: 'str9'
};
有例如上面这样一个对象,要求封装一个函数,传入对象和某个 value,返回该 value 路径上的 key。比如:searchKeys(obj, "str3"),得到 "key3, key2"。—— 来源于 @zanetti 的一篇 「博问」
我本想在该「博问」下作答,但是「博客园」提示我注册尚且不满 24 小时,不允许我回答「博问」栏目的问题。好吧,我确实是 3 月 16 日晚上刚刚注册的「博客园」账号,既然无法回答那就干脆写第一篇博客。博客的申请在 3 月 17 日早上刚刚审核通过。
言归正传,这题要求遍历对象,而本质其实就是对一个多叉树进行递归。
封装函数并遍历对象
第一步是最简单的,不必多说。
function search(object, value) {
for (var key in object) {
// ...
}
}
必须先有结果
既然知道这里需要递归,那么最重要一点就是必须找到结果,因为没有最终结果的递归操作肯定会「无法自拔」。此题,当 key 对应的值等于 value 时,递归就将结束,代码如下。
if (object[key] == value) {
return [key];
} else {
}
然后思考递归
现在需要分析一下,如果没有找到 value,object[key] 的值有哪些情况?
1、一个不等于 value 字符串;2、一个对象。
如果是一个字符串,那么肯定是不需要任何操作,继续下一次 for ... in 循环即可。如果是一个对象,那么继续对这个对象重复刚刚的遍历操作,此处即递归。
if (typeof(object[key]) == "object") {
var temp = search(object[key], value);
}
继续分析(理论上脑子里面可以假设这是倒数第二步即可)。
假如递归的操作并没有找到 value,那么返回值是什么?我用一个 temp 变量来接收返回值,而没有找到 value 肯定就没有返回值,所以 temp 应该是 undefined。
假如递归的操作找到了 value,那么返回值是什么?对,是 key(这里我为了输出方便,使用了数组存放所有的 key)。既然得到了最后一步的 key,把他与当前的 key 放在一起即可。
if (temp == undefined) {
} else {
return [key, temp].flat();
}
这里我是用了 flat() 方法,这个方法可以抹平一个数组。不管嵌套了多少的数组,都会展开成为一个无嵌套数组。
举个例子:array = ["a", "b", ["c", "d"], ["e", ["f"]]] => array = array.flat() => array = ["a", "b", "c", "d", "e", "f"];
最终函数
function search(object, value) {
for (var key in object) {
if (object[key] == value) {
return [key];
} else if (typeof(object[key]) == "object") {
var temp = search(object[key], value);
if (temp == undefined) {
} else {
return [key, temp].flat();
}
} else {
}
}
}
再稍微修改一下。
function search(object, value) {
for (var key in object) {
if (object[key] == value) return [key];
if (typeof(object[key]) == "object") {
var temp = search(object[key], value);
if (temp) return [key, temp].flat();
}
}
}
至此,第一篇博客写完。我接触 JavaScript 的时间不长,也是个新手,好在这题主要是递归算法,如有错误请在评论中指出,不胜感激!
查看java返回的值,JavaScript 遍历对象查找指定的值并返回路径相关推荐
- javascript 遍历对象
javascript 遍历对象 <!DOCTYPE html> <html lang="en"><head><meta charset=& ...
- jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等...
简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...
- java如何遍历对象里所有的值
前端可以直接获取对象的属性,进行循环,但是java后端只能获取对象,无法对对象属性里的值进行循环 可以使用对象的反射,获取对象属性的值和属性名,也就是对象的字段名 具体实现如下: Field[] fi ...
- vue 取数组第一个值_vue遍历对象中的数组取值示例
前几天小项目,没考虑周全,让后端改接口,改成数组中包含对象中包含数组的形式,后来越琢磨越不对,后台把所有数据放在了一个对象里,我拿弹窗数据不好拿,索性又改了回来,把后端折腾够呛,自己也折腾够呛,发上来 ...
- 关于javascript遍历对象
1:遍历对象属性var obj={a:'aa',b:'bb'} for(var i in obj) {alert(i); //输出 a b } var obj={'a':'aa','b':'bb'} ...
- javascript遍历对象的属性
不同类型的循环 JavaScript 支持不同类型的循环: for - 多次遍历代码块 for/in - 遍历对象属性 while - 当指定条件为 true 时循环一段代码块 do/while - ...
- Javascript 遍历对象的四种方法
方法一: for - in 循环遍历对象自身的和继承的可枚举属性 (循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)) 方法二: 使用Object.keys()遍历 (返回一个数组,包括对 ...
- javascript 数组对象根据相同属性值{key:value}合并两个对象
前言 js 数组对象的合并,方便自己后续使用与学习,废话少说,这段代码的功能就是根据某个相同的value值合并两个数组对象 比如:根据相同的hotelId来合并 一 , 数组对象根据相同属性值合并两个 ...
- php 获取js对象的属性值,js获取对象,数组所有属性键值(key)和对应值(value)的方法示例...
本文实例讲述了js获取对象,数组所有属性键值(key)和对应值(value)的方法.分享给大家供大家参考,具体如下: var values=function(object) { var values ...
最新文章
- 【java】itoo项目实战之hibernate 懒载入优化性能
- 对B样条的理解和整理
- MATLAB实战系列(四)- LabVIEW初探
- 关于蓝牙服务UUID自定义简介
- windows 64位 安装mvn提示 不是内部或外部命令
- mongo数据库插入数据_深入研究Mongo数据库
- ext.net 开发学习——常用布局(八)
- html网站页面上字体改变,如何设置网页字体样式
- html网页制作代码大全:庆余年——电影网站7页,不包含js 有登陆注册,表格 table布局 ,有的登录注册页面,内嵌 css
- 如何对萤石云视频解码
- vue elementui table表格序号一列 样式设计
- 【渝粤教育】国家开放大学2018年秋季 1046t金融学 参考试题
- Composure获取子层级图像:使用变换通道
- MFC-----CMap
- (2000-2020高精度世界人口密度地图下载分享【附下载链接】
- linux 进程 signal,c/c++ linux 进程间通信系列1,使用signal,kill
- Java对象在内存中的存储
- 好用的Maven仓库推荐
- html内外边距怎么设置,css内边距怎么设置?
- 千里之堤毁于蚁穴(慎用HD Wallets)
热门文章
- 人工智能到底威胁人类还是造福人类?
- Py之configobj:configobj的简介、安装、使用方法之详细攻略
- TF之DNN:TF利用简单7个神经元的三层全连接神经网络【2-3-2】实现降低损失到0.000以下
- ML之回归预测:利用两种机器学习算法(LiR,XGBoost(调优+重要性可视化+特征选择模型))对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值
- DL之DNN:利用MultiLayerNetExtend模型【6*100+ReLU+SGD,dropout】对Mnist数据集训练来抑制过拟合
- ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分
- Dataset之Rotten Tomatoes:Rotten Tomatoes影评数据集简介、下载、使用方法之详细攻略
- ML之Clustering之K-means:K-means算法简介、应用、经典案例之详细攻略
- BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)
- MQ各个元素的详细理解