js一个快速提取所需字符串的方法
var obj ={ "dependencies": { "axios": "^0.27.2", "lodash": "^4.17.21", "nanoid": "^4.0.0", "normalize.css": "^8.0.1", "pinia": "^2.0.18", "qs": "^6.11.0", "vant": "^3.5.4", "vue": "^3.2.37", "vue-router": "^4.1.3" }, "devDependencies": { "@vitejs/plugin-vue": "^3.0.3", "typescript": "^4.6.4", "vite": "^3.0.7", "vue-tsc": "^0.39.5" } } const iResult = {} for (var key in obj){ var objItem = obj[key] console.log(objItem) for (var item in objItem) { console.log(item) console.log(iResult[key]) !iResult[key] && (iResult[key] = [])// 这里的意思是不存在直接赋值为数组 { iResult[key].push(item) } } } iResult
换es5:
const obj ={ "dependencies": { "axios": "^0.27.2", "lodash": "^4.17.21", "nanoid": "^4.0.0", "normalize.css": "^8.0.1", "pinia": "^2.0.18", "qs": "^6.11.0", "vant": "^3.5.4", "vue": "^3.2.37", "vue-router": "^4.1.3" }, "devDependencies": { "@vitejs/plugin-vue": "^3.0.3", "typescript": "^4.6.4", "vite": "^3.0.7", "vue-tsc": "^0.39.5" } } const iResult = {} Object.keys(obj).map(key => { iResult[key] = Object.keys(obj[key]) }) iResult
ES5
引入了Object.keys
方法,成员是参数对象自身的(不含继承的)所有可遍历( enumerable
)属性的键名。
var data={a:1,b:2,c:9,d:4,e:5}; console.log(Object.keys(data));//["a", "b", "c", "d", "e"] Object.keys(data).map((key,item)=>{ // data是数据源 最外层的,再遍历一次就是内层的了。 console.log(key,data[key]);//key=>属性名 data[key]=>属性值 });
ECMAScript6以前,在JavaScript中实现“键/值”式存储可以使用Object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值。但这种实现并非没有问题,为此TC39委员会专门为“键/值”存储定义了一个规范。
作为ES6的新增特性,Map是一种新的集合类型,为这门语言带来了真正的键/值存储机制。Map的大多特性都可以通过Object类型实现,但二者之间还是存在一些细微的差异。创建一个跟原数组相同的数组,每个值默认都是undefined
var array1 = [1,4,9,16]; const map1 = array1.map(x => x *2); console.log(map1)
结果:
> Array [2,8,18,32]
Array.join(' ')以空格来组合数组元素
--vue ...的用法
(一)操作数组
// 1.把数组中的元素孤立起来 let iArray = ['1', '2', '3']; console.log(...iArray); // 打印结果 1 2 3 // 2.在数组中添加元素 let iArray = ['1', '2', '3']; console.log(['0', ...iArray, '4']); // 打印结果 ["0", "1", "2", "3", "4"] // 3.在数组中删除元素(取出一个元素) // 与结构赋值的结合 // 如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。 const [first, ...rest] = [1, 2, 3, 4, 5]; console.log(first); // 打印结果 1 console.log([...rest]); // 打印结果 [2, 3, 4, 5] const [one, ...last] = ["foo"]; console.log(one); // 打印结果 foo console.log([...last]); // 打印结果 [] // 4.数组的合并 // ES6 的写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2); console.log(arr1); // 打印结果 [0, 1, 2, 3, 4, 5] // 推荐使用写法 console.log([...arr1, ...arr2]); // 打印结果 [0, 1, 2, 3, 4, 5] // 5.将字符串转成数组 let iString = 'zhongguoren'; console.log([...iString]); // 打印结果 ["z", "h", "o", "n", "g", "g", "u", "o", "r", "e", "n"] // 6.Map 和 Set 结构, Generator 函数 let map = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], ]); let arr = [...map.keys()]; console.log(arr); // 打印结果 [1, 2, 3] // 7.当做参数传递和直接传数组的区别 iClick4() { let iArray = ['1', '2', '3']; //注意传的时候,就要三个点 this.hanshu(...iArray); }, hanshu(...iArray) { let ooo = 1; console.log(...iArray); // 打印结果 1 2 3 }, // 8.求出最大值 let iArray = [1, 2, 3, 99, 44, 66, 21, 85, 77]; let ooo = Math.max(...iArray); console.log(ooo); // 打印结果 99 // 9.如果对没有iterator接口的对象,使用扩展运算符,将会报错。 let obj = { name: 'zhh', age: '20' } console.log([...obj]);
操作对象
// 1.添加一个属性 let a = {age: 18, id: 10}; let c = {name: 'zhh', ...a}; console.log(c); // 打印结果 {name: "zhh", age: 18, id: 10} // 2.修改一个属性 let a = {name: 'zhh', age: 18, id: 10}; let c = {...a, name: 'zhh1'}; console.log(c); // 打印结果 {name: "zhh1", age: 18, id: 10} // 3.删除一个属性(拿出属性或者对象) let a = {name: 'zhh', age: 18, id: 10}; let {name, ...c} = a; console.log(name, c); // 打印结果 zhh {age: 18, id: 10}