Knockout中ko.utils中處理數組的方法集合

每一套框架基本上都會有一個工具類,如:Vue中的Vue.utilKnockout中的ko.utilsjQuery直接將一些工具類放到了$里面,如果你還需要更多的工具類可以試試lodash。本文只介紹一下Knockout中ko.utils中處理數組的一些方法。

ko.utils.arrayForEach(array, callback)

與Array.prototype.forEach作用一致。提供函數(回調函數)對數組的每個元素執行一次。使用方法:

var arr = [1, 2, 3, 4];
ko.utils.arrayForEach(arr, function(el, index) {console.log(el)
});

上面分別輸出:1234

ko.utils.arrayForEach源碼:

ko.utils.arrayForEach = function (array, action) {for (var i = 0, j = array.length; i < j; i++)action(array[i], i);
}

ko.utils.arrayMap(array, callback)

與Array.prototype.map作用一致。返回一個由原數組中的每個元素調用一個指定方法后的返回值組成的新數組。使用方法:

var arr = [1, 2, 3, 4];
var newArr = ko.utils.arrayMap(arr, function(el, index) {return el + 1;
});

上面得到的newArr為:[2, 3, 4, 5]

ko.utils.arrayMap源碼:

ko.utils.arrayMap = function (array, mapping) {array = array || [];var result = [];for (var i = 0, j = array.length; i < j; i++)result.push(mapping(array[i], i));return result;
}

ko.utils.arrayFilter(array, callback)

與Array.prototype.filter作用一致。使用指定的函數測試所有元素,并創建一個包含所有通過測試的元素的新數組。使用方法:

var arr = [1, 2, 3, 4];
var newArr = ko.utils.arrayFilter(arr, function(el, index) {return el > 2;
});

上面得到的newArr為:[3, 4]

ko.utils.arrayFilter源碼:

ko.utils.arrayFilter = function (array, predicate) {array = array || [];var result = [];for (var i = 0, j = array.length; i < j; i++)if (predicate(array[i], i))result.push(array[i]);return result;
}

ko.utils.arrayIndexOf(array, item)

與Array.prototype.indexOf作用一致。返回給定元素能找在數組中找到的第一個索引值,否則返回-1。使用方法:

var arr = [1, 2, 3, 4];
var index = ko.utils.arrayIndexOf(arr, 2);

上面得到的index值為1

ko.utils.arrayIndexOf源碼:

ko.utils.arrayIndexOf = function (array, item) {if (typeof Array.prototype.indexOf == "function")return Array.prototype.indexOf.call(array, item);for (var i = 0, j = array.length; i < j; i++)if (array[i] === item)return i;return -1;
}

ko.utils.arrayRemoveItem(array, itemToRemove)

從數組中刪除一個指定值的元素。使用方法:

var arr = [1, 2, 3, 4, 2];
ko.utils.arrayRemoveItem(arr, 2);

上面arr現在為[1, 3, 4, 2]

ko.utils.arrayRemoveItem源碼:

ko.utils.arrayRemoveItem = function (array, itemToRemove) {var index = ko.utils.arrayIndexOf(array, itemToRemove);if (index > 0) {array.splice(index, 1);}else if (index === 0) {array.shift();}
}

ko.utils.arrayGetDistinctValues(array)

對數組進行去重(如果數組長度很大效率會很低),返回去重之后的新數組。使用方法:

var arr = [1, 2, 3, 4, 2, 4, '1'];
var newArr = ko.utils.arrayGetDistinctValues(arr);

得到的newArr值為[1, 2, 3, 4, '1']

ko.utils.arrayGetDistinctValues源碼:

ko.utils.arrayGetDistinctValues = function (array) {array = array || [];var result = [];for (var i = 0, j = array.length; i < j; i++) {if (ko.utils.arrayIndexOf(result, array[i]) < 0)result.push(array[i]);}return result;
}

ko.utils.arrayFirst(array, callback[, thisArg])

Array.prototype.find方法類似(命名與find偏差太大了)。返回第一個滿足條件的元素。使用方法:

var arr = [{name: "apple"},{name: "banana"},{name: "cherries"}
];
var item = ko.utils.arrayFirst(arr, function(el, index){return el.name === "banana";
})

ko.utils.arrayFirst源碼:

ko.utils.arrayFirst = function (array, predicate, predicateOwner) {for (var i = 0, j = array.length; i < j; i++)if (predicate.call(predicateOwner, array[i], i))return array[i];return null;
}

ko.utils.arrayPushAll(array, valuesToPush)

將數組valuesToPush合并到數組array中。使用方法:

var arr = [1, 2, 3];
ko.utils.arrayPushAll(arr, [4, 5]);

最后arr的值為[1, 2, 3, 4, 5]

ko.utils.arrayPushAll源碼:

ko.utils.arrayPushAll = function (array, valuesToPush) {if (valuesToPush instanceof Array)array.push.apply(array, valuesToPush);elsefor (var i = 0, j = valuesToPush.length; i < j; i++)array.push(valuesToPush[i]);return array;
}

ko.utils.addOrRemoveItem(array, value, included)

includedtrue,則array中含有value不處理,沒有則添加; includedfalse,則array中含有value刪除,沒有則不處理。 使用方法:

var arr = [1, 2, 3];ko.utils.addOrRemoveItem(arr, 4, true); /// arr為[1, 2, 3, 4]// 或者
ko.utils.addOrRemoveItem(arr, 4, false); /// arr為[1, 2, 3]// 或者
ko.utils.addOrRemoveItem(arr, 2, true); /// arr為[1, 2, 3]// 或者
ko.utils.addOrRemoveItem(arr, 2, false); /// arr為[1, 3]

ko.utils.addOrRemoveItem源碼:

addOrRemoveItem: function(array, value, included) {var existingEntryIndex = ko.utils.arrayIndexOf(ko.utils.peekObservable(array), value);if (existingEntryIndex < 0) {if (included)array.push(value);} else {if (!included)array.splice(existingEntryIndex, 1);}
}

ko中基本上就這些處理數組的方法了,如果你知道ko中有這些方法,那么在做兼容比較舊的瀏覽器(IE8及以下)的開發能讓你輕松很多。

轉自:https://www.xiaoboy.com/topic/ko-utils-array-function.html

轉載于:https://www.cnblogs.com/tangge/p/10333161.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249724.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

$nextTick 源碼

x現在沒時間&#xff0c;留個坑 轉載于:https://www.cnblogs.com/smzd/p/11634665.html

java 發布訂閱

1.發布者接口 package com.yy.subpub; /** * Description: 發布者接口 * author: leijing * date: 2016年9月29日 下午5:07:20 */ public interface IPublisher<M> { /** * Description: 向訂閱器發布消息 * param subscribePublish 訂閱器 * param message 消息 * para…

.NET Core Session的簡單使用

前言 在之前的.NET 里&#xff0c;我們可以很容易的使用Session讀取值。那今天我們來看看 如何在.NET Core中讀取Session值呢&#xff1f; Session 使用Session之前&#xff0c;我們需要到Startup.cs中配置我們的服務如下&#xff1a; ①在ConfigureServices中加入&#xff1a;…

EasyNVR內網攝像機接入網關+EasyNVS云端管理平臺,組件起一套輕量級類似于企業級螢石云的解決方案...

背景分析 對于EasyNVR我們應該都了解&#xff0c;主要應用于互聯安防直播&#xff0c;對于EasyNVR&#xff0c;我們可以清楚的發現&#xff0c;EasyNVR的工作機制是EasyNVR拉取攝像機的RTSP/Onvif視頻流&#xff0c;然后客戶端可以通過訪問EasyNVR服務端實現流分發&#xff0c;…

java.util.Queue用法

隊列是一種特殊的線性表&#xff0c;它只允許在表的前端&#xff08;front&#xff09;進行刪除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;進行插入操作。進行插入操作的端稱為隊尾&#xff0c;進行刪除操作的端稱為隊頭。隊列中沒有元素時&#xff0c;稱為空隊…

Vim刪除文件到行首或者行尾

vim用的不是很熟練&#xff0c;只是有時候需要的時候會學習一下 我們知道&#xff0c;vim有三種模式&#xff0c;一種是一般模式&#xff0c;一種是編輯模式&#xff0c;另外一種是命令行模式 在一般模式下&#xff0c;可以進行刪除&#xff0c;復制粘貼等操作&#xff0c;在編…

新版本微信導致的ios表單bug

解決方法如下&#xff1a; $(document).delegate(input, textarea, select, blur, function(){setTimeout(function(){$(html).animate({height: 100.1vh}, 100, function(){$(this).animate({height: 100vh}, 1)})},100); }); 轉載于:https://www.cnblogs.com/qdlhj/p/1033676…

Golang的值類型和引用類型的范圍、存儲區域、區別

常見的值類型和引用類型分別有哪些&#xff1f; 值類型&#xff1a;基本數據類型 int 系列, float 系列, bool, string 、數組和結構體struct&#xff0c;使用這些類型的變量直接指向存在內存中的值&#xff0c;值類型的變量的值通常存儲在棧中。 引用類型&#xff1a;指針、sl…

python3之time模塊

時間戳1: import time2: print(time.time()) 可讀的時間格式1: import time2: print(time.ctime())3: later time.time() 6004: print(time.ctime(later)) 結果1: Wed Jan 30 17:11:49 20192: Wed Jan 30 17:21:49 2019 暫停程序(進程或者線程)1: time.sleep(secs) 計時時鐘1…

網絡規劃設計(項目類業務)

前期準備&#xff1a;找經開部要到當地的現場結構圖 1.和通信段約好時間&#xff0c;實地跑一趟&#xff0c;找到光纜、電纜的原匯聚點。 2.與車間人員溝通&#xff0c;看是否要遷匯聚點&#xff0c;倘若遷匯聚點&#xff0c;遷到哪里。 3.怎么從光纜/電纜的舊址遷到新址&#…

RPC框架實現原理

一、什么是RPC框架&#xff1f; RPC&#xff0c;全稱為Remote Procedure Call&#xff0c;即遠程過程調用&#xff0c;是一種計算機通信協議。 比如現在有兩臺機器&#xff1a;A機器和B機器&#xff0c;并且分別部署了應用A和應用B。假設此時位于A機器上的A應用想要調用位于B機…

jQuery安裝

http://www.runoob.com/jquery/jquery-install.html 網頁中添加jQuery&#xff1a; 方法一&#xff1a;可以從http://jquery.com/download/ 下載jQuery庫 方法二&#xff1a;從CDN中載入jQuery 下載 jQuery 有兩個版本的 jQuery 可供下載&#xff1a; Production version - 用于…

redhat相關配置

網絡配置&#xff1a; vi /etc/sysconfig/network-scripts/ifcfg-eth BOOTPROTOstaticONBOOTyesIP配置IPADDR192.168.31.102NETMASK255.255.255.0GATEWAY192.168.31.1DNS1192.168.31.1redhat6&#xff1a;防火墻&#xff1a;1. 永久性生效開啟&#xff1a;chkconfig iptables o…

zookeeper入門系列

zookeeper可謂是目前使用最廣泛的分布式組件了。其功能和職責單一&#xff0c;但卻非常重要。 在現今這個年代&#xff0c;介紹zookeeper的書和文章可謂多如牛毛&#xff0c;本人不才&#xff0c;試圖通過自己的理解來介紹zookeeper&#xff0c;希望通過一個初學者的視角來學習…

java.lang.NumberFormatException: multiple points錯誤問題

最近項目一直會出現時間轉換報錯&#xff0c;一直不知道是什么問題??? java.lang.NumberFormatException: multiple pointsat sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1110)at java.lang.Double.parseDouble(Double.java:540)at java.text.Dig…

plsql查詢數據中文亂碼

在plsql中進行表數據查詢的時候&#xff0c;發現查詢出來的中文居然顯示為亂碼&#xff0c;通過查找資料解決該問題。 1、查看數據的編碼&#xff08;語句&#xff1a;select * from v$nls_parameters&#xff09; 發現顯示的語言不是我們常用的GBK模式 2、配置本機語言環境變量…

Zookeeper的功能以及工作原理

1.ZooKeeper是什么&#xff1f; ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Google的Chubby一個開源的實現&#xff0c;它是集群的管理者&#xff0c;監視著集群中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終&#xf…

前端學習總結——CSS布局方式之傳統布局

傳統布局 傳統布局即是早期在平板電腦、智能手機等移動設備并不流行的時候使用的布局方式。 一、表格布局 例如&#xff1a;采用表格方式實現如下簡單模型的布局 &#xff08;1&#xff09;固定布局 即用具體的像素值來確定模型的寬和高等值。 HTML代碼如下所示 <tabl…

aspose word for java去除目錄文字藍色樣式以及文字下方藍色下劃線

//去除目錄文字藍色樣式以及文字下方藍色下劃線for(FieldStart field: (Iterable<FieldStart>)doc.getChildNodes(NodeType.FIELD_START, true)){if (field.getFieldType() FieldType.FIELD_HYPERLINK){FieldHyperlink hyperlink (FieldHyperlink)field.getField();//判…

[POI2007]MEG-Megalopolis

傳送門&#xff1a;嘟嘟嘟 第一反應是樹鏈剖分&#xff0c;但是太長懶得寫&#xff0c;然后就想出了一個很不錯的做法。 想一下&#xff0c;如果我們改一條邊&#xff0c;那么影響的只有他的子樹&#xff0c;只要先搞一個dfs序&#xff0c;為什么搞出這個呢&#xff1f;因為有一…