Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Напишите свою реализацию Array.map для объектов: (https://javascript.ru/forum/misc/75932-napishite-svoyu-realizaciyu-array-map-dlya-obektov.html)

Marson 18.11.2018 15:10

Напишите свою реализацию Array.map для объектов:
 
map({name: "Иван", age: 17},function(key,value){
var result = {};
result[key+"_"] = value + "$";
return result;
}) //должен вернуть {name_: "Иван$", age_: "17$"}

function map(object, callback){
 for(var key in object)
  return console.log(new Object(callback(key, object[key])));
}

map({name: 'Ivan', age: 24}, function(key, value){
  var result = {};
  result[key+"_"] = value + "$";
  return result;
})


Что бы выводило все ключи и все значения, нужно цикл добавить?
В консоль выводит только name_: "Ivan$", т.е только первое ключ, значение

рони 18.11.2018 15:37

Marson,
function map(object, callback){
var obj = {};
for(var key in object)  Object.assign(obj,callback(key, object[key]));
  return obj
}

var obj = map({name: 'Ivan', age: 24}, function(key, value){
  var result = {};
  result[key+"_"] = value + "$";
  return result;
})
alert(JSON.stringify(obj, null, 4));

рони 18.11.2018 15:42

Marson,
function map(object, callback){
for(var key in object)  Object.assign(object,callback(key, object[key])), delete object[key];
}
var object = {name: 'Ivan', age: 24};
map(object, function(key, value){
  var result = {};
  result[key+"_"] = value + "$";
  return result;
})
alert(JSON.stringify(object, null, 4));

рони 18.11.2018 16:04

Marson,
:)
function map(object, callback){
for(var key in object) {
var obj = callback(key, object[key]);
delete object[key];
for(key in obj) object[key] = obj[key];
}
}
var object = {name: 'Ivan', age: 24};
map(object, function(key, value){
  var result = {};
  result[key+"_"] = value + "$";
  return result;
})
alert(JSON.stringify(object, null, 4));

Marson 18.11.2018 18:52

Спасибо, но можно в мой код, в общую функцию добавить как-то цикл?

Malleys 18.11.2018 19:04

А зачем в данном случае вам нужно изобретение велосипеда? Или вам нужно именно изобретение велосипеда?
const result = Object.entries({ name: 'Ivan', age: 24 })
	.reduce((object, [key, value]) => {
		object[key + "_"] = value + "$";
		return object;
	}, {});

console.log(result);


Если нужно именно через объявление, то можно так...

function map(object, reducer) {
	return Object.entries(object).reduce(reducer, {})
}
const result = map({ name: 'Ivan', age: 24 }, (object, [key, value]) => {
	object[key + "_"] = value + "$";
	return object
});

console.log(result);


В callback вам не нужен новый объект? Сомневаюсь!

Marson 19.11.2018 22:22

Спасибо:thanks:


Часовой пояс GMT +3, время: 09:35.