@webe
frontend

Есть ли в GO filter map reduce some every?

Может кто подсказать как будет в GO выглядить вот такой код:
var data = [{name:"width", value:100},{name:"height", value:300}] // было
var result = data.reduce((acc, {name,value}) => ({ ...acc, [name]: value}), {})

 console.log(result); // {width:100, height:300} // стало


Хочу понять проще ли там работать с данными или сложней чем в JS
  • Вопрос задан
  • 953 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ghostiam
На Go писатель, серверов пинатель.
В го нет "магии" и есть статическая типизация.
Всю "магию" нужно писать в лоб.
Переписал ваш пример на го, но это будет работать если тип у поля value всегда будет int, но если там будут разные типы, придётся использовать interface, что не очень хорошо.
Го не подойдёт, если данные не типизированы(появится морока с конвертацией, а так же снизится производительность, в сравнении с типизированным подходом).

https://play.golang.org/p/eGfphNwZqRR
Код
package main

import (
	"fmt"
)

func main() {
	type KV struct {
		Name  string
		Value int
	}

	data := []KV{
		{
			Name:  "width",
			Value: 100,
		},
		{
			Name:  "height",
			Value: 300,
		},
	}

	result := make(map[string]int)

	// reduce
	for _, v := range data {
		result[v.Name] = v.Value
	}

	fmt.Printf("%#v", result) // map[string]int{"width":100, "height":300}
}


Пример с интерфейсом и разными типами:
https://play.golang.org/p/OXUVv58YZoa
Код
package main

import (
	"fmt"
)

func main() {
	type KV struct {
		Name  string
		Value interface{}
	}

	data := []KV{
		{
			Name:  "width",
			Value: 100,
		},
		{
			Name:  "height",
			Value: 300,
		},
		{
			Name:  "image",
			Value: "cat.jpg",
		},
	}

	result := make(map[string]interface{})

	for _, v := range data {
		result[v.Name] = v.Value
	}

	fmt.Printf("%#v", result) // map[string]interface {}{"width":100, "height":300, "image":"cat.jpg"}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы