Javascript之对象数组的处理

obj={
    
    home:true,account:false,other:false}

提取对象的keys 组成数组,
Object.keys(obj) //["home", "account", "other"]
提取对象的value组成数组,

Object.values(obj)  //[true, false, false]

对数组/对象遍历有for-in循环和for-of循环两种循环。其中,for-in是ES5标准,遍历的是key(可遍历对象、数组或字符串的key “index”);for-of是ES6标准,遍历的是value(可遍历对象、数组或字符串的value)。

function marge(str){
    
    
    for(let item of Object.keys(obj)){
    
    
        obj[item]=item==str;}
}

marge("account")          //obj    {home: false, account: true, other: false}    vue.js  v-if="***"只显示一个页面

a=[45,20,50,4,25]
a.join('|')                                  //a  "45|20|50|4|25"
"45|20|50|4|25".split("|")                   //   ['45', '20', '50', '4', '25']
a.filter((item)=>{
    
    return item%2==0})         //a  [20, 50, 4]
a.sort()                                     //无参  默认字典序[20, 25, 4, 45, 50]
a.forEach((item,index)=>{
    
    console.log(item,"--------",index)})    /*
20 -------- 0
25 -------- 1
4 -------- 2
45 -------- 3
50 -------- 4*/
a.sort((x,y)=>{
    
    
        return x-y;//(左,右):ASC左减右    DESC右减左    tips:0归负值那一边
});                                          //[4, 20, 25, 45, 50]
a.reverse()                                  //[50, 45, 25, 20, 4]
a.slice(0,3)                                 //[4, 20, 25]
a.slice(-2)                                  //[45, 50]
a.slice(3)                                   //[45, 50]                         //参数2  默认为长度末尾

a.map((item)=>{
    
    return item+1})               //[46, 21, 51, 5, 26]           每个元素都进行操作+1
a.map((item,index)=>{
    
    return item*index})     //[0, 20, 100, 12, 100]         (需要数组进行接收的,不会改变原数组的值),可以覆盖或则修改

a=[1,2,3];   b=[4,5,6];
[...a,...b]                                 // [1, 2, 3, 4, 5, 6]

let arr = [1, 2, 3, 4, 5];
let arr2 = arr.map(value => value * value).filter(value => value > 10);//16  25

a=[{
    
    b:1,c:2,d:3},{
    
    b:2,c:3,d:4},{
    
    b:3,c:4,d:5}];
a.find(m=>m.b==3);        //{b: 3, c: 4, d: 5}   //undefined
a.findIndex(m=>m.b==3)    //2                    //-1

push()和pop()结合使用,就构成了“后进先出”的栈结构(stack)。
push()和shift()结合使用,就构成了“先进先出”的队列结构(queue)。

unshift()方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。


其他的:fetch函数: [下面跑不起来的代码例子],async 的方法是可以用then可以拿到上个return返回结果.可以用多个then调整返回参数的格式.

export async function getRankListBefore() {
    
    
    const query = `
    {
        nodeMiningStakes(orderBy: amount, orderDirection: desc, first: 20) {
          id
          amount
        }
      }
    `
    return fetch("https://api.***.io/***/name/***/***", {
    
    
        method: 'post',
        headers: {
    
    
            'Content-type': 'application/json'
        },
        body: JSON.stringify({
    
    
            query
        })
    })
        .then((response) => response.json())
        .then((data) => {
    
    
            const nodeMiningStakes = data.data.nodeMiningStakes
            SDK_MAIN.rankList = {
    
    
                data: nodeMiningStakes.map(item => {
    
    
                    return {
    
    
                        ...item,
                        amount: convertBigNumberToNormal(item.amount, 18),
                    }
                })
            }
        }).catch(() => {
    
    
            SDK_MAIN.rankList = {
    
     data: [] }
        })
}

属性的遍历:
ES6 一共有 5 种方法可以遍历对象的属性。

(1)for…in

for…in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

(2)Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

(3)Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

首先遍历所有数值键,按照数值升序排列。
其次遍历所有字符串键,按照加入时间升序排列。
最后遍历所有 Symbol 键,按照加入时间升序排列。

Reflect.ownKeys({
    
     [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]

上面代码中,Reflect.ownKeys方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性2和10,其次是字符串属性b和a,最后是 Symbol 属性。


关键字 delete 删除对象的对应字段,数组也可以删除元素,但长度不变

obj={
    
    home:true,account:false,other:false}
delete obj.other
//obj={account: false,home: true}

TypeError: web3_1.default is not a constructor报错TS转JS,解决办法:

{
    
    
  "compilerOptions": {
    
    
    "esModuleInterop": true
  }
}

字符串处理合集:
https://juejin.cn/post/7010928535053271077
padStart() padEnd() 用法示例

y="2020"
m="9"
r="4"
y+m.padStart(2,"0")+r.padStart(2,"0")//20200904

猜你喜欢

转载自blog.csdn.net/kuilaurence/article/details/112538812