맵을 JavaScript 개체로 변환
그래서 저는 네스트된 경로를 디렉토리에 매핑하기 위한 키/값 쌍을 포함하는 다음과 같은 javascript를 받았습니다.
function createPaths(aliases, propName, path) {
aliases.set(propName, path);
}
map = new Map();
createPaths(map, 'paths.aliases.server.entry', 'src/test');
createPaths(map, 'paths.aliases.dist.entry', 'dist/test');
이제 맵의 키를 사용하여 JSON 개체를 만듭니다.
그래야 한다.
paths: {
aliases: {
server: {
entry: 'src/test'
},
dist: {
entry: 'dist/test'
}
}
}
이것을 바로 할 수 있는 방법이 있는지 잘 모르겠다.어떤 도움이라도 감사합니다.
MDN으로 지정하면fromEntries()
는 노드 v12부터 사용할 수 있습니다.
const map1 = new Map([
['foo', 'bar'],
['baz', 42]
]);
const obj = Object.fromEntries(map1);
// { foo: 'bar', baz: 42 }
객체를 맵으로 다시 변환하는 경우:
const map2 = new Map(Object.entries(obj));
// Map(2) { 'foo' => 'bar', 'baz' => 42 }
이 기능이 충분히 설명되었으면 합니다.이게 내가 그 일을 할 때 쓰던 거야.
/*
* Turn the map<String, Object> to an Object so it can be converted to JSON
*/
function mapToObj(inputMap) {
let obj = {};
inputMap.forEach(function(value, key){
obj[key] = value
});
return obj;
}
JSON.stringify(returnedObject)
ES6 사용방법만
Object.fromEntries
const log = console.log;
const map = new Map();
// undefined
map.set(`a`, 1);
// Map(1) {"a" => 1}
map.set(`b`, 2);
// Map(1) {"a" => 1, "b" => 2}
map.set(`c`, 3);
// Map(2) {"a" => 1, "b" => 2, "c" => 3}
// Object.fromEntries ✅
const obj = Object.fromEntries(map);
log(`\nobj`, obj);
// obj { a: 1, b: 2, c: 3 }
...spread
&destructuring assignment
const log = console.log;
const map = new Map();
// undefined
map.set(`a`, 1);
// Map(1) {"a" => 1}
map.set(`b`, 2);
// Map(1) {"a" => 1, "b" => 2}
map.set(`c`, 3);
// Map(2) {"a" => 1, "b" => 2, "c" => 3}
const autoConvertMapToObject = (map) => {
const obj = {};
for (const item of [...map]) {
const [
key,
value
] = item;
obj[key] = value;
}
return obj;
}
const obj = autoConvertMapToObject(map)
log(`\nobj`, obj);
// obj { a: 1, b: 2, c: 3 }
참조
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
https://2ality.com/2015/08/es6-map-json.html
지도와 키를 루프하여 값을 할당할 수 있습니다.
function createPaths(aliases, propName, path) {
aliases.set(propName, path);
}
var map = new Map(),
object = {};
createPaths(map, 'paths.aliases.server.entry', 'src/test');
createPaths(map, 'paths.aliases.dist.entry', 'dist/test');
map.forEach((value, key) => {
var keys = key.split('.'),
last = keys.pop();
keys.reduce((r, a) => r[a] = r[a] || {}, object)[last] = value;
});
console.log(object);
또 다른 접근법입니다.어느 쪽이 퍼포먼스가 좋은지 궁금하지만 jsPerf는 다운되어 있습니다.
var obj = {};
function createPaths(map, path, value)
{
if(typeof path === "string") path = path.split(".");
if(path.length == 1)
{
map[path[0]] = value;
return;
}
else
{
if(!(path[0] in map)) map[path[0]] = {};
return createPaths(map[path[0]], path.slice(1), value);
}
}
createPaths(obj, 'paths.aliases.server.entry', 'src/test');
createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
console.log(obj);
재귀 없음:
var obj = {};
function createPaths(map, path, value)
{
var map = map;
var path = path.split(".");
for(var i = 0, numPath = path.length - 1; i < numPath; ++i)
{
if(!(path[i] in map)) map[path[i]] = {};
map = map[path[i]];
}
map[path[i]] = value;
}
createPaths(obj, 'paths.aliases.server.entry', 'src/test');
createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
createPaths(obj, 'paths.aliases.dist.dingo', 'dist/test');
createPaths(obj, 'paths.bingo.dist.entry', 'dist/test');
console.log(obj);
var obj = {};
function createPaths(map, path, value)
{
var map = map;
var path = path.split(".");
while(path.length > 1)
{
map = map[path[0]] = map[path.shift()] || {};
}
map[path.shift()] = value;
}
createPaths(obj, 'paths.aliases.server.entry', 'src/test');
createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
createPaths(obj, 'paths.aliases.dist.dingo', 'dist/test');
createPaths(obj, 'paths.bingo.dist.entry', 'dist/test');
console.log(obj);
var items = {1:"apple",2:"orange",3:"pineapple"};
let map = new Map(Object.entries(items)); //object to map
console.log(map);
const obj = new Object();
map.forEach((value,key)=> obj[key]=value); // map to object
console.log(obj);
언급URL : https://stackoverflow.com/questions/37437805/convert-map-to-javascript-object
'itsource' 카테고리의 다른 글
ng-pattern을 사용하여 angularJs의 이메일 ID를 확인하는 방법 (0) | 2023.02.14 |
---|---|
응답 텍스트 파일을 읽는 방법 (0) | 2023.02.14 |
Angular에서 부모 스코프 값을 ng 반복 루프에 전달합니다. (0) | 2023.02.10 |
반응 후크 - 개체 집합에서 중첩된 속성이 변경되면 useEffect를 트리거합니다. (0) | 2023.02.10 |
JSON의 PostgreSQL 인덱스 (0) | 2023.02.10 |