有个需求,将本页面所有消息批量设置为已读,由于使用vue.js,则直接修改数据,将数组中每个对象的状态设置为已读,但是没有找到一个简便的方法,查询以后发现JS Array有个map()方法,官方定义为:

map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。不修改数组本身

let new_array = arr.map(function callback(currentValue, index, array) { 
    // Return element for new_array 
}[, thisArg])
callback
生成新数组元素的函数,使用三个参数:
    currentValue
    callback 的第一个参数,数组中正在处理的当前元素。
    index
    callback 的第二个参数,数组中正在处理的当前元素的索引。
    array
    callback 的第三个参数,map 方法被调用的数组。
thisArg
可选的。执行 callback 函数时 使用的this 值。
一个新数组,每个元素都是回调函数的结果。

根据需求,批量修改数组中每个对象的属性值
eg:

var arr = [{
    name: "张三",
    age: 10
    name: "王五",
    age: 20
    name: "王尼玛",
    age: 30
arr = arr.map(function(item, index, arr) {
    item.age = 1;
    return item;
console.log(JSON.stringify(arr));// [{"name":"张三","age":1},{"name":"王五","age":1},{"name":"王尼玛","age":1}]

这种写法还是比较简单的,与foreach

// 实现 ECMA-262, Edition 5, 15.4.4.19  
// 参考: http://es5.github.com/#x15.4.4.19  
if (!Array.prototype.map) {  
  Array.prototype.map = function(callback, thisArg) {  
    var T, A, k;  
    if (this == null) {  
      throw new TypeError(" this is null or not defined");  
    // 1. 将O赋值为调用map方法的数组.  
    var O = Object(this);  
    // 2.将len赋值为数组O的长度.  
    var len = O.length >>> 0;  
    // 3.如果callback不是函数,则抛出TypeError异常.  
    if (Object.prototype.toString.call(callback) != "[object Function]") {  
      throw new TypeError(callback + " is not a function");  
    // 4. 如果参数thisArg有值,则将T赋值为thisArg;否则T为undefined.  
    if (thisArg) {  
      T = thisArg;  
    // 5. 创建新数组A,长度为原数组O长度len  
    A = new Array(len);  
    // 6. 将k赋值为0  
    k = 0;  
    // 7. 当 k < len 时,执行循环.  
    while(k < len) {  
      var kValue, mappedValue;  
      //遍历O,k为原数组索引  
      if (k in O) {  
        //kValue为索引k对应的值.  
        kValue = O[ k ];  
        // 执行callback,this指向T,参数有三个.分别是kValue:值,k:索引,O:原数组.  
        mappedValue = callback.call(T, kValue, k, O);  
        // 返回值添加到新数组A中.  
        A[ k ] = mappedValue;  
      // k自增1  
    // 8. 返回新数组A  
    return A;  
1.[].slice.call(lis): 将伪数组转换为真数组
2.node.nodeType: 得到节点类型
3.Object.defineProperty(obj, propertyName, {}): 给对象添加/修改属性(指定描述符)
	configurable: true/false  是否可以重新define
	enumerable: true/false 是否可以枚举(for..in / keys())
	value: 指定初始值
	writable: true/false value是否可以修改存取(访问)描述符
	get: 函数, 用来得到当前属性值
	set: 函数, 用来监视当前属性值的变化
4.Object.keys(obj): 得到对象自身可枚举的属性名的数组
5.DocumentFragment: 文档碎片(高效批量更新多个节点)
6.obj.ha
var stooges = [
            {label:1,value:1,placeCode: 'sh', stock_code: 40},
            {label:1,value:1,placeCode: 'sh', stock_code: 50},
            {label:1,value:1,plac...
                                    i want to update data in bulk i have over 50 rows to be updated in an array of objects in node JS. something likehttps://github.com/felixge/node-mysqland How do I do a bulk insert in mySQL using node....
                                    let arr1=[“元素1”,“元素2”,“元素3”,“元素4”,“元素5”];
let arr2=arr1.fill(0);
console.log(arr2)//打印结果为[0,0,0,0,0]
除此之外,fill方法还可以指定填充的位置。
array.fill(value, start, end)
参数	描述
value	必需。填充的值。
start	可选。开始填充位置。
end	可选。停止填充位置 (默认为 array.length)
之所以今天写这个,是因为有一个特定的需求,本来想根
arr.unshift(item1,item2)
在中间添加元素
arr.splice(index,0,'x')在index(如:index=4,则在第4个位置,也是第三个位置的后面间隙)处插入x,0表示什么都不删
arr.splice(index,1)在index这个位置删掉一个
arr.spli
深入理解 React JS 中的 setState
从源码的角度再看 React JS 中的 setState
从源码的角度看 React JS 中批量更新 State 的策略(上)
1. batchingStrategy 策略
现在我们开始来看 b...