JS工作常用方法集合(持续更新中...)

239 阅读2分钟

1.将数组根据目标键名取出或获取排除键名以外的数据

   /**
   * 将数组根据目标键名中取出
   * @param arr 目标数组
   * @param keys 目标键名
   * @param exclude 是否为排除目标键名模式,默认为false
   *  false: 按键名获取字段; true: 获取键名以外的字段
   * @return []
   * */
  arrToKeyData = (arr = [], keys = [], exclude = false) => {
    let data = [];
    arr.map((item, index) => {
      data[index] = {};
      let keyNames = Object.keys(item); // 获取arr键名集合
      keys.map(key => {
        keyNames.map(keyName => {
          // 判断是否为排除模式
          if (keyName === key && !exclude) {
            data[index][keyName] = item[key]
          } else if (keyName !== key && exclude){
            data[index][keyName] = item[key]
          }
        })
      });
    });
    return data
  };
  // 示例
  let D = [
      {key: 1, value: "11", name: 'AAAA'},
      {key: 2, value: "12", name: 'BBBB'},
    ];
    console.log("按键名获取:", arrToKeyData(D, ["key"])); // [{key:1},{key: 2}]
    console.log("获取键名以外的:", arrToKeyData(D, ["key"], true)); // [{value: "11", name: 'AAAA'},{value: "12", name: 'BBBB'}]

2.循环两个数组,根据条件返回新的数组(支持多个条件)

  /**
   * 循环两个数组,根据条件返回新的数组
   * @param arr 目标数组
   * @param arr2 数组2
   * @param keys 条件名称
   * @returns [] 符合条件的数据
   */
  arrsByKey = (arr = [], arr2 = [], keys = []) => {
    let list = [];
    arr.map(item => {
      let num = 0; // 记录比对成功次数
      arr2.map(subItem => {
        keys.map(key => {
          item[key] == subItem[key] && num++
        });
      });
      // 比对成功的次数等于比较字段长度,视为比对成功
      num === keys.length && list.push({...item})
    });
    return list
  }
  // 示例
  let A = [
      {key: 1, value: "11", name: 'AAAA'},
      {key: 2, value: "12", name: 'BBBB'},
    ];
    let B = [
      {key: 1, value: "11"},
      {key: 2, value: "22"},
    ];
    console.log("单个条件合并:", arrsByKey(A, B, ["key"])); // [ {key: 1, value: "11", name: 'AAAA'}, {key: 2, value: "12", name: 'BBBB'}]
    console.log("多个条件合并:", arrsByKey(A, B, ["key", "value"])); // [ {key: 1, value: "11", name: 'AAAA'}]

3.将数组按键名取出单一值(可通过条件过滤)

  /**
   * 将数组按键名取出单一值
   * @param arr [] 目标数组
   * @param key [] 取出数据的属性名
   * @param where ()
   * @returns [] 一维数组
   */
  static arrDataBy(arr, key, where) {
    let data = [];
    for (let i = 0; i < arr.length; i++) {
      let val = arr[i][key];
      if (where && typeof where === "function") {
        let B = where(arr[i]);
        if (B) {
          data.push(val)
        }
      } else {
        data.push(val)
      }
    }
    return data
  }
  // 示例
  let A = [
      {key: 1, value: "11", name: 'AAAA'},
      {key: 2, value: "12", name: 'BBBB'},
    ];
   
    console.log("直接取出:", arrDataBy(A, "key")); // [1, 2]
    console.log("通过方法过滤:", arrsByKey(A, "key", (item) => (item.value === "11")))); // [1]