level 8
js复制数组的4种方式
var a=[1,2,3]
var c=[].concat(a)
var c=a.slice(0)
var c=Array.from(a)
var c=[...a]
2023年07月25日 01点07分
1
level 8
js复制数组的4种方式
var a=[1,2,3]
var c=[].concat(a)
var c=a.slice(0)
var c=Array.from(a)
var c=[...a]
map filter reduce 浅拷贝
注意这四种都是浅拷贝,如果是引用对象类型
var a=[{like:"彩花"}]
Object.assign 浅拷贝
深拷贝:
JSON.parse(JSON.stringify(list))
还是有点问题,有些类型不支持
2023年07月25日 03点07分
2
level 8
JSON.stringify(myJson) 是一个 JavaScript 方法,用于将 JavaScript 对象转换为 JSON 字符串。默认情况下,它生成的 JSON 字符串没有格式化,每个属性都以逗号分隔,并使用双引号括起来。
如果你想控制输出格式,你可以使用 JSON.stringify 的 replacer 和 space 参数。
replacer 是一个函数,用于自定义对象的转换过程。例如,你可以定义一个函数,用于将对象属性名转换为小写,属性值转换为大写。
javascript复制function convertToUpperCase(key, value) { return { 'key': value.toUpperCase() };}var myJson = { 'key': 'value'};var jsonString = JSON.stringify(myJson, convertToUpperCase);console.log(jsonString);// 输出: {"key":"VALUE"}
space参数用于指定生成的 JSON 字符串的空格数。默认情况下,生成的 JSON 字符串没有空格。例如,你可以设置space` 为 4,生成如下的 JSON 字符串:
javascript复制var myJson = { "key1": "value1", "key2": "value2"};var jsonString = JSON.stringify(myJson, null, 4);console.log(jsonString);// 输出: {"key1": "value1", "key2": "value2"}
请注意,以上示例中的 convertToUpperCase 和 4 参数是手动设置的,你可能需要根据具体需求进行修改。
2023年07月25日 03点07分
3
level 8
JSON.stringify(list) 和 JSON.parse(JSON.stringify(list)) 都不是真正的深拷贝方法,它们只能处理基本数据类型和简单的对象结构。如果列表中包含复杂对象、数组、日期、函数等,那么这些方法将无法正确处理。
以下是一些情况下不适用 JSON.parse(JSON.stringify(list)) 的情况:
列表中包含复杂对象:如果列表中包含对象、数组、日期、函数等复杂数据类型,那么使用 JSON.parse(JSON.stringify(list)) 将无法正确处理这些数据类型。
列表中包含引用数据类型:如果列表中包含引用数据类型(例如对象、数组、函数等),那么使用 JSON.parse(JSON.stringify(list)) 将无法正确处理这些数据类型的引用。
列表中包含循环引用:如果列表中包含循环引用,那么使用 JSON.parse(JSON.stringify(list)) 将无法正确处理这些数据类型的引用。
列表中包含未定义属性:如果列表中包含未定义的属性,那么使用 JSON.parse(JSON.stringify(list)) 将无法正确处理这些数据类型的属性。
对于以上情况,应该使用深拷贝方法来创建真正的拷贝。常见的深拷贝方法包括使用递归、使用 JSON.parse(JSON.stringify(json)) + JSON.stringify(JSON.parse(json)) 或者使用其他第三方库。
2023年07月25日 03点07分
4
level 8
在JavaScript中,实现深拷贝需要处理对象中的嵌套引用。默认情况下,JSON.stringify()和JSON.parse()函数会进行浅拷贝,即复制对象中的引用,而不是复制引用本身。
以下是一个简单的实现深拷贝的函数:
javascript复制function deepClone(obj) { let clone = Object.assign({}, obj); for(let i in clone) { if(typeof clone[i] == "object" && clone[i] != null) { clone[i] = deepClone(clone[i]); } } return clone;}
这个函数首先使用Object.assign()方法创建一个新对象,这个新对象是原始对象的浅拷贝。然后,它遍历新对象的属性,如果属性是对象(也就是说,它引用了一个对象),那么它就递归调用deepClone()函数来复制这个对象。
这个函数的工作原理是创建一个新的对象,然后递归地复制这个对象中的所有属性。它主要解决了一些深拷贝中可能出现的问题,如循环引用等。
注意:此函数并不能解决所有的深拷贝问题。例如,如果对象包含一些原始类型的数据(例如,字符串、数字、布尔值等),或者包含函数,这个函数将无法处理。在这种情况下,你可能需要使用其他的方法,如使用JSON.stringify()和JSON.parse(),但是你需要明确地处理这些情况。
2023年07月25日 04点07分
5