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;