obj_arr_str_for/index.js

import cavar_type from "../cavar_type";

/**
 * 功能:数组\对象\字符串进行循环操作<br/>
 *  注意(1):当第一个参数传入【数组类型】的数据时正常使用 callback函数可接受形参【3】个参数 item:每一个成员;index:对应索引;arr:调用方法的原数组<br/>
 *  注意(2):当第一个参数传入【对象类型】的数据时正常使用 callback函数可接受形参【2】个参数 arr:调用方法的原对象;key:每一个成员的key值<br/>
 *  注意(3):当第一个参数传入【字符串类型】的数据时正常使用 callback函数可接受形参【3】个参数 item:每一个成员;index:对应索引;arr:调用方法的原字符串 且请注意需要进行return才能返回修改后字符串的值;【注】不会影响原字符串,会返回一组新的字符串
 * @param {array|object|string} data - 目标数组、字符串、对象
 * @param {function} callback - 执行函数,对data参数进行处理的回调函数,需要对特殊条件进行return判断,该回调函数可以接受两个参数 1. item每一个成员;2.index 对应索引(或下标)

 * @returns {array} - 数组,如果没有满足执行函数return 值的函数规则时 返回空数组并报错
 */

function obj_arr_str_for(data, callback) {
    const data_type = cavar_type(data);
    if (
      data_type === "array" ||
      data_type === "object" ||
      (data_type === "string" && cavar_type(callback) === "function")
    ) {
      if (data_type === "array") {
        if (Array.prototype.forEach) {
          Array.prototype.forEach.call(data, callback);
        } else {
          for (let index = 0; index < data.length; index++) {
            callback(data[index], index, data);
          }
        }
      } else if (data_type === "object") {
        let data_object = Object.keys(data);
        for (let index = 0; index < data_object.length; index++) {
          callback(data, data_object[index]);
        }
        return data;
      } else if (data_type === "string") {
        return Array.prototype.map.call(data, callback).join(""); // 需要默认return item或item相关运算
      }
    } else {
      console.error(
        new Error(
          "obj_arr_str_for: arguments parameter " +
            "is " +
            "not Array," +
            " you is sb"
        )
      );
      return [];
    }
  }
  export default obj_arr_str_for;