カスタムマップを作成/フィルタ/縮小JavaScript、Pythonとルビーで

14642 ワード

新しい言語を学ぶとき、自分のスキルをテストしたり、関数や配列、関数として引数などとして機能するために、自分のマップ/フィルタ/reduce関数を作成するのが好きです.
だから今私はどのように私はすべてのJavascript

// Map

function myMap(array,callback) {
    newArray=[]
    array.forEach(value => newArray.push(callback(value)))
    return newArray
}

const transformed = myMap(["red","blue","purple"] , (color) => `Color ${color}`)

console.log(transformed)

//Filter

function myFilter(array,callback) {
    newArray=[]
    array.forEach(value => callback(value) && newArray.push(value))
    return newArray
}

const filtered = myFilter([1,4,8,2,10,6] , number => number > 5)

console.log(filtered)

// Reduce

function myReduce(array,callback) {
    let acc = 0
    array.forEach(value => acc = callback(acc,value))
    return acc
}

const reduced = myReduce([4,5,9,10] , (acc,current) => acc + current)

console.log(reduced)
今すぐPythonでそれをしましょう
Pythonはほとんど同じで、ラムダ代わりに矢印関数を使用します

# Map

def myMap(list,callback):
    newList=[]
    for item in list:
        newList.append(callback(item))
    return newList

transformed=myMap(["red","blue","purple"],lambda color: "Color " + color)

print(transformed)

#Filter

def myFilter(list,callback):
    newList=[]
    for item in list:
        if callback(item) : newList.append(item)
    return newList

filtered= myFilter([1,4,8,2,10,6],lambda number : number>5)

print(filtered)

#Reduce

def myReduce(list,callback):
    acum=0
    for el in list:
        acum=callback(acum,el)
    return acum

reduced = myReduce([4,5,9,10] , lambda current,actual:current+actual)

print(reduced)
現在ルビー
Rubyは少し異なっており、匿名関数のようなブロックを渡します.引数は
そして、それらはyield word


#Map

def myMap(array)
    newarray=[]
    for value in array do
        result=yield(value)
        newarray.push(result)
    end
    return newarray
end

transformed=myMap(["red","blue","purple"]) do | color | "Color #{color} " end

puts transformed.inspect

# Filter

def myFilter(array)
    newarray=[]
    for value in array do
        newarray.push(value) if yield(value)
    end
    return newarray
end

filtered = myFilter([1,4,8,2,10,6]) do | number | number > 5 end

puts filtered.inspect


#Reduce

def myReduce(array)
    acc = 0
    for value in array do
        acc = yield(acc,value)
    end
    return acc
end

reduced = myReduce([4,5,9,10]) do | acc,curr | acc+curr end


puts reduced.inspect

ここでは、それらのすべてが同じ結果を持っていることを示すイメージです

一般的に、私は新しいものを学ぶ楽しみがたくさんありました、そして、私はそれがあなたのコーディング技術を改善するためにするそのような素晴らしいことであると思います.