当前位置: 首页 > news >正文

json.stringify的高级用法,和for of的原理

**

/* for of 是用来循环可迭代属性的,如何判断是否是可迭代属性,数据原型链上有个Symbol.iterator说明这个数据是可迭代数据 Symbol.iterator是一个函数,调用此函数,会返回一个对象,对象的内部有一个next函数,调用next函数会返回一个对象这个对象内部有value和done值,value表示你正在迭代的属性的内容,done来标识是否迭代完成,迭代完成done为true,否则done为false */

**

let arr = [10, 20]
console.log(‘arr’, arr);
let set = new Set([123, 2]);
console.log(‘set’, set);
console.log(‘arr[Symbol.iterator]’, arr[Symbol.iterator]);
// arr[Symbol.iterator]是一个函数,函数return一个对象,内部有一个next方法
console.log(‘arrSymbol.iterator’, arrSymbol.iterator);//这个对象内部有个next方法
let iter = arrSymbol.iterator;
console.log(‘iter.next()’, iter.next());
console.log(‘iter.next()’, iter.next());
console.log(‘iter.next()’, iter.next());
/*
arr[Symbol.iterator]下的函数是需要返回一个对象,这个return对象上面返回一个next方法,调用这个next方法会return 一个迭代对象,{value:1,done},value表示迭代的真实value值,比如数组那就是数组的真实值,done表示是否迭代完真个数据,为false表示没有迭代完,如果迭代完了done为true;
*/
const replacer = function (key, value) {//配合JSON.stringify把不需要的属性过滤出来
console.log(‘key’, key);
console.log(‘value’, value);
if (isNaN(+key)) {//如果key不是数字就忽略该项,return undefined就表示忽略该项
return undefined
} else {
return value
}
}

let iteratorObj = {
1: 1,
2: 2,
Symbol.iterator {
let arr = Object.values(JSON.parse(JSON.stringify(iteratorObj, replacer))),
index = 0,
len = arr.length
console.log(arr, 1);
return {
next() {
if (index < len) {
return {
value: arr[index++],
done: false
}
} else {
return {
value: undefined,
done: true
}
}
}
}
}
}

//让对象变成可迭代的数,可以被for of循环
for (const item of iteratorObj) {
console.log(‘iteratorObj_item’, item);
}

const JSONObj = {
1: 1,
2: 2,
test: ‘123’,
key: undefined,
fun: function () {

}

}

/*
JSON.stringify(),
使用在转化对象的时候,可以传递两个参数第一个是你要转的数据,第二个是一个函数,函数内部有key,value你可以根据key,value去过滤数据
return undefined就表示忽略该项
,第二个参数除了可以传递函数还可以传递数组,数组内部是你要保留的key的属性;
如上JSON.stringify(JSONObj, [‘test’])→这样就只转了test

const fi = (key, value) => {
if (key == ‘test’ || key == ‘fun’) {
return undefined
}
return value
}
const res = JSON.stringify(JSONObj, fi);
console.log(JSON.stringify(JSONObj, [‘test’], ‘zhang_’));//第三个参数是给key家前缀

*/
const fi = (key, value) => {
if (key == ‘test’ || key == ‘fun’) {
return undefined
}
return value
}
const res = JSON.stringify(JSONObj, fi);
console.log(‘res’, res);//
const JSONArr = [124, 5235, 235]
console.log(JSON.stringify(JSONObj, [‘test’], ‘zhang_’));//第三个参数是给key家前缀

http://www.lryc.cn/news/98804.html

相关文章:

  • SpringCloudAlibaba微服务实战系列(三)Sentinel1.8.0+流控
  • mybatis - no getter for property,以及@JsonIgnore
  • 云原生周刊:K8s v1.28 中的结构化身份验证配置
  • 支持向量机概述
  • 安装x265
  • 设计模式-观察者模式
  • K8s使用Ceph作为后端存储
  • hive整合es,详细过程。
  • vue中tab隐藏display:none(v-show无效,v-if有效)
  • 2023年进阶测试,从接口测试到接口自动化测试总结,一篇彻底打通...
  • 客户支持工具从被动到主动的演变
  • 网络安全行业相关证书
  • [内网渗透]SUID提权
  • clang 编译器前端 分析
  • 3个月精通Python(基础篇)——第1天:Python和Vscode环境安装
  • react native web RN webpack nginx 部署
  • Jmeter性能测试之Beanshell解析并提取json响应
  • vue-echarts配置项详解
  • 两个csv进行根据相同字段进行合并
  • SolidWorks绘制Maxwell仿真用带桥接的三维平板螺旋线圈
  • 【每日一个知识点二】原型链
  • placeholder样式自定义(uniapp 微信小程序、h5)
  • 【LeetCode】383. 赎金信
  • 【算力革命】算力架构
  • 【视觉SLAM入门】4.3. (非线性最小二乘问题)优化算法实现-ceres和g2o, 图优化理论
  • vue Can‘t resolve ‘path‘
  • 【JavaEE初阶】——第七节.Servlet入门学习笔记
  • vue项目登录页面实现记住用户名和密码
  • 数学建模-MATLAB三维作图
  • pytorch工具——使用pytorch构建一个神经网络