数组的增删改查操作

数组的增删改查操作

大家好,又见面了,我是全栈君。

做批量数据录入时须要对json内的数组进行增删改查操作,splice还是非常强大的记录一下用法。

var lang = [“php”,”java”,”javascript”]; 

//删除 

var removed = lang.splice(2,1); 

console.log(lang); //php,javascript 

//console.log(removed); //java ,返回删除的项 

//插入 

var insert = lang.splice(0,0,”asp”); //从第0个位置開始插入 

//alert(insert); //返回空数组 

console.log(lang); //asp,php,javascript 

//替换 

var replace = lang.splice(1,1,”c#”,”ruby”); //删除一项,插入两项 

//alert(lang); //asp,c#,ruby 

console.log(replace); //php,返回删除的项 

另外,json多项的增删改查也贴上。备用:

/**
 * Json对象操作,增删改查
 *
 * @author lellansin
 * @blog www.lellansin.com
 * @version 0.1
 * 
 * 解决一些常见的问题
 * get/set 解决获取和设置时。无节点中断的问题
 * create  能够创建多级节点,若存在则覆盖新值
 * delete  删除节点及其子节点
 * print_r 格式化输出对象(调试用)
 * 实例见底部
 */

function Json() {

}

/**
 * 获取Json对象中的某个节点
 * 比如:json.get(Data, ‘country’, ‘province’, ‘city’);
 * 结果则返回 Data[‘country’][‘province’][‘city’]
 * 无则返回false
 */
Json.prototype.get = function(obj, key) {
  var args = this.get.arguments;
  var result = obj;

  for (var i = 1; i < args.length; i++) {
    result = result[args[i]];
    if (result === undefined) {
      return false;
    };
  };
  return result;
};

/**
 * 设置Json对象中的某个节点
 * 比如:obj.set(data, “ENTRY”, “FA_TOKEN_INVALID”, 1234);
 * 将 data[‘ENTRY’][‘FA_TOKEN_INVALID’] 设置为1234
 * 成功true, 失败false
 */
Json.prototype.set = function(obj, key) {
  var args = this.set.arguments;
  if (ergodic_set(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}

/**
 * 在Json对象中创建节点(若存在则覆盖值)
 * 比如:obj.create(data, ‘add’, ‘hello’, ‘test’, 120);
 * 加入 data[‘create’][‘hello’][‘test’] 节点并设置值为 120
 * 成功true, 失败false
 */
Json.prototype.create = function(obj, key) {
  var args = this.create.arguments;
  if (ergodic_create(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}

/**
 * 在Json对象中删除节点
 * 比如:obj.delete(prods, ‘grade’, ‘math’);
 * 成功true, 失败false
 */
Json.prototype.delete = function(obj, key) {
  var args = this.delete.arguments;
  if (ergodic_delete(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}

/**
 * 返回Json对象的字符串形式(封装 ECMAScript 库函数)
 */
Json.prototype.getStr = function(obj) {
  return JSON.stringify(obj);
}

/**
 * 解析字符串返回Json对象(封装 ECMAScript 库函数)
 */
Json.prototype.getJson = function(str) {
  return JSON.parse(str);
}

/**
 * 格式化输出Json对象
 */
Json.prototype.print_r = function(obj) {
  console.log(“{“)
  ergodic_print(obj, “”);
  console.log(“}”)
}

function ergodic_print(obj, indentation) {
  var indent = “ ” + indentation;
  if (obj.constructor == Object) {
    for (var p in obj) {
      if (obj[p].constructor == Array || obj[p].constructor == Object) {
        console.log(indent + “[” + p + “] => ” + typeof(obj) + “”);
        console.log(indent + “{“);
        ergodic_print(obj[p], indent);
        console.log(indent + “}”);
      } else if (obj[p].constructor == String) {
        console.log(indent + “[” + p + “] => ‘” + obj[p] + “‘”);
      } else {
        console.log(indent + “[” + p + “] => ” + obj[p] + “”);
      }
    }
  }
}

function ergodic_set(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length – 2) {
          return ergodic_set(obj[tmpKey], args, floor + 1);
        } else {
          // 此时參数floor为倒数第二个。加1值为最后一个
          obj[tmpKey] = args[floor + 1];
          console.log(“成功设置,返回true”);
          return true;
        }
      }
    }
  }
}

function ergodic_create(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length – 2) {
          return ergodic_create(obj[tmpKey], args, floor + 1);
        } else {
          obj[tmpKey] = args[floor + 1];
          return true;
        }
      }
    }
  }
  // 节点不存在,创建新节点
  if (floor < args.length – 1) {
    var jsonstr = getJsonFormat(args[args.length – 1]);

    for (var i = args.length – 2; i > floor; i–) {
      jsonstr = ‘{“‘ + args[i] + ‘”:’ + jsonstr + ‘}’;
    };

    // 使用eval解析第三方Json数据时。可能会运行恶意代码
    // var node = eval(‘(‘ + jsonstr + ‘)’);
    var node = JSON.parse(jsonstr);
    obj[args[floor]] = node;
    return true;
  }
}

function ergodic_delete(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length – 1) {
          return ergodic_delete(obj[tmpKey], args, floor + 1);
        } else {
          delete obj[tmpKey];
          return true;
        }
      }
    }
  }
}

function getJsonFormat(param) {
  if (param.constructor == String) {
    return ‘”‘ + param + ‘”‘;
  } else {
    return param;
  }
}

/**
 * 使用实例
 */

var data = {};

var prods = {
  ‘name’: ‘Alan’,
  ‘grade’: {
    ‘Chinese’: 120,
    ‘math’: 130,
    ‘competition’: {
      ‘NOI’: ‘First prize’
    }
  }
};
/*
var json = new Json();

console.log(“获取Json中节点”);
console.log(json.get(data)); 
console.log(json.create(data, “0”,””));
console.log(json.set(data, “0”, prods));
console.log(json.create(data, “1”,””));
console.log(json.set(data, “1”, prods));
console.log(json.create(data, “2”,””));
console.log(json.set(data, “2”, prods));
console.log(json.get(data)); 
json.print_r(data);*/
/*
console.log(json.get(data, “OK”)); // 200
console.log(json.get(data, “ENTRY”, “FA_TOKEN_INVALID”)); // 1001
console.log(json.get(data, “TEST”, “获取没有的节点”)); // false 没有的节点返回 false

console.log(“设置Json中节点”);
console.log(json.set(data, “ENTRY”, “FA_TOKEN_INVALID”, 1234));   // true 设置成功
console.log(json.get(data, “ENTRY”, “FA_TOKEN_INVALID”));  // 1234   获取刚设置的节点
console.log(json.set(data, “ENTRY”, “測试设置没有的节点”, 1234)); // false 设置失败

console.log(“创建新的Json节点”);
var prods = {
  ‘name’: ‘Alan’,
  ‘grade’: {
    ‘Chinese’: 120,
    ‘math’: 130,
    ‘competition’: {
      ‘NOI’: ‘First prize’
    }
  }
};
console.log(json.create(prods, ‘create’, ‘hello’, ‘test’, 120)); // true
console.log(json.create(prods, ‘create’, ‘hello’, ‘test2’, ‘通过’)); // true

console.log(“格式化输出节点”);
json.print_r(prods);

console.log(“删除节点”);
console.log(json.delete(prods, ‘grade’, ‘math’)); // true
console.log(json.delete(prods, ‘grade’, ‘competition’)); // true
console.log(json.delete(prods, ‘grade’, ‘删除没有的节点’)); // false
json.print_r(prods);
*/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116366.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java0xffffffff为什么表示为-1

    Java0xffffffff为什么表示为-1inti=0xffffffff;System.out.println(i);输出-1上面的程序有个问题为什么inti=0xffffffff;没有报溢出错误,且输出为-1?因为0xffffffff实际是二进制,程序中任何十进制,八进制,16进制的数在计算机底层都是二进制,表示成X进制只是为了让人看明白,所以0xffffffff在电脑中就是32个1,而不是2的32次…

  • C++的this指针

    C++的this指针C++的this指针当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。C++在初始化对象时,每个对象中的数据成员都会得到系统分配的自己独立的存储空间。对于成员函数来说,一个函数的代码段在内存中只有一份,同一个类中的不同对象在调用自己的成…

  • 如何设置python的环境变量_anaconda环境变量手动设置

    如何设置python的环境变量_anaconda环境变量手动设置在python项目实践中,不知道为什么我的os.getenv一直拿不到环境变量,于是我就试了三种设置环境变量的方法,中解决了问题。一.系统变量设置python环境变量的配置方法:1、第一步在我们的电脑上鼠标右键此电脑,选择属性,进去之后,点击高级系统设置,如下图所示2、第二步进去之后,点击环境变量,如下图所示:3、第三步进去环境变量界面之后,点击path,进行编辑,如下图所示:二.pycharm用户环境变量设置:1.打开文件—设置2.打开构建,执行,部署–python控制台–环境变量

  • 开源游戏引擎哪家强?八款知名引擎资料够你忙[通俗易懂]

    开源游戏引擎哪家强?八款知名引擎资料够你忙[通俗易懂]游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。本文介绍了几款常见的开源游戏引擎,并附上相关资料。游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。以下介绍了几款常见的开源游戏引擎:OGRE

    2022年10月21日
  • Mybatis 一对多关联查询collection用法[通俗易懂]

    Mybatis 一对多关联查询collection用法[通俗易懂]使用resultMap,select标签,resultMap的中的collection表示一对多,column对应select标签中的sql里的字段或者别名,当两个表字段名称有相同的情况下,可以定义别名。<resultMapid=”authorWorksInfo”type=”package.vo.AuthorWorksInfo”><idcolumn=”id”property=”id”/><resultcolumn=”name”pro…

    2022年10月30日
  • 。。。

    。。。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号