読者です 読者をやめる 読者になる 読者になる

ko.utils(配列編)

これはKnockoutJSアドベントカレンダーの記事です。


KnockoutJS Advent Calendar 2014 - Qiita


今日は Knockout の便利機能が入った ko.utils について適当に紹介します。

今回は配列編。

紹介するのは以下のメソッドです。

  • ko.utils.arrayForEach
  • ko.utils.arrayFirst
  • ko.utils.arrayFilter
  • ko.utils.arrayGetDistinctValues
  • ko.utils.arrayMap
  • ko.utils.arrayPushAll
  • ko.utils.arrayRemoveItem

ちなみにソースコードはここです。

https://github.com/knockout/knockout/blob/master/src/utils.js


  • ko.utils.arrayForEach

配列をぐるぐるします。

サンプル

var years = [1950, 1960, 1970, 1980];
  ko.utils.arrayForEach(years, function(item, index){
    console.log(index + " : " + item);
});

結果

0 : 1950
1 : 1960
2 : 1970
3 : 1980
  • ko.utils.arrayFirst

配列の中で最初に条件に一致した値を返します。

サンプル

var strArray = ["a1", "b2", "c3", "d4"];
var result = ko.utils.arrayFirst(strArray, function(value){ return value.charAt(0) === "b"});
console.log(result);

結果

b2
  • ko.utils.arrayFilter

配列を指定した条件でフィルタした結果の配列を返します。

サンプル

var result = ko.utils.arrayFilter(["a", "b", "c", "d", "e", "f"], function (item, index) {
  return index % 2 == 0;
});
console.log(result);

結果

["a", "c", "e"]
  • ko.utils.arrayGetDistinctValues

配列の中の重複しない値を返します。

var result = ko.utils.arrayGetDistinctValues(["a", "b", "b", "c", "c"]);
console.log(result);

結果

["a", "b", "c"]
  • ko.utils.arrayIndexOf

最初に見つかった配列の値のインデックスを返します。
見つからなかった場合は -1 を返します。

var result1 = ko.utils.arrayIndexOf(["a", "b", "c", "d", "c"], "c");
console.log(result1);
var result2 = ko.utils.arrayIndexOf(["a", "b", "c"], "d");
console.log(result2);

結果

2
-1
  • ko.utils.arrayMap

配列の中の各要素に対して特定の処理を行った配列を返します。

var result = ko.utils.arrayMap([1, 2, 3, 4, 5], function(item, index){
  return item * 2;
});
console.log(result);

結果

[2, 4, 6, 8, 10]
  • ko.utils.arrayPushAll

配列に他の配列を追加します。

サンプル

var targetArray = [1,2,3];
var extraArray = ["a", "b", "c"];
ko.utils.arrayPushAll(targetArray, extraArray);
console.log(targetArray);

結果

[1, 2, 3, "a", "b", "c"]
  • ko.utils.arrayRemoveItem

最初に一致した値を配列から削除します。(一つだけ)

サンプル

var input = ["a", "b", "c", "b", "e"];
ko.utils.arrayRemoveItem(input, "b");
console.log(input);

結果

["a", "c", "b", "e"]


ここのブログと内容がかぶったけどCoffeeではなくJavaScriptで書いたのでご愛嬌。
http://weathercook.hatenadiary.jp/entry/2013/01/06/211720