lodash로 어떻게 큰 object
것을 array
바꿀 수 있습니까?
var obj = {
22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}
// transform to
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]
답변
답변
_.toArray(obj);
다음과 같이 출력됩니다 :
[
{
"name": "Ivan",
"id": 12,
"friends": [
2,
44,
12
],
"works": {
"books": [],
"films": []
}
},
{
"name": "John",
"id": 22,
"friends": [
5,
31,
55
],
"works": {
"books": [],
"films": []
}
}
]"
답변
누군가 관심이 있다면 현대적인 기본 솔루션 :
const arr = Object.keys(obj).map(key => ({ key, value: obj[key] }));
또는 (IE가 아님) :
const arr = Object.entries(obj).map(([key, value]) => ({ key, value }));
답변
나를 위해, 이것은 효과가 있었다 :
_.map(_.toPairs(data), d => _.fromPairs([d]));
돌아서 다
{"a":"b", "c":"d", "e":"f"}
으로
[{"a":"b"}, {"c":"d"}, {"e":"f"}]
답변
결과를 얻는 데는 몇 가지 방법이 있습니다. 카테고리로 분류하자 :
ES6 값만 :
이에 대한 주요 방법은 Object.values 입니다. 그러나 Object.keys 와 Array.map 을 사용 하면 예상 결과를 얻을 수 있습니다.
Object.values(obj)
Object.keys(obj).map(k => obj[k])
var obj = {
A: {
name: "John"
},
B: {
name: "Ivan"
}
}
console.log('Object.values:', Object.values(obj))
console.log('Object.keys:', Object.keys(obj).map(k => obj[k]))
ES6 키 및 가치 :
map 및 ES6 동적 / 계산 된 속성을 사용하고 파괴 하면 키를 유지하고 맵에서 객체를 반환 할 수 있습니다.
Object.keys(obj).map(k => ({[k]: obj[k]}))
Object.entries(obj).map(([k,v]) => ({[k]:v}))
var obj = {
A: {
name: "John"
},
B: {
name: "Ivan"
}
}
console.log('Object.keys:', Object.keys(obj).map(k => ({
[k]: obj[k]
})))
console.log('Object.entries:', Object.entries(obj).map(([k, v]) => ({
[k]: v
})))
Lodash 값만 :
_.values
그러나 이를 위해 설계된 방법 은 “바로 가기”와 같은 _.map
유틸리티 방법과 객체 의 값만_.toArray
포함하는 배열을 반환하는 유틸리티 방법 이 있습니다 . 당신은 할 수도 불구 하고 사용하여 개체의 값을 가져 표기합니다._.map
_.keys
obj[key]
참고 : _.map
객체가 전달되면 baseMap
기본적으로 forEach
객체 속성에있는 핸들러를 사용 합니다.
_.values(obj)
_.map(obj)
_.toArray(obj)
_.map(_.keys(obj), k => obj[k])
var obj = {
A: {
name: "John"
},
B: {
name: "Ivan"
}
}
console.log('values:', _.values(obj))
console.log('map:', _.map(obj))
console.log('toArray:', _.toArray(obj))
console.log('keys:', _.map(_.keys(obj), k => obj[k]))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Lodash 키 및 가치 :
// Outputs an array with [[KEY, VALUE]]
_.entries(obj)
_.toPairs(obj)
// Outputs array with objects containing the keys and values
_.map(_.entries(obj), ([k,v]) => ({[k]:v}))
_.map(_.keys(obj), k => ({[k]: obj[k]}))
_.transform(obj, (r,c,k) => r.push({[k]:c}), [])
_.reduce(obj, (r,c,k) => (r.push({[k]:c}), r), [])
var obj = {
A: {
name: "John"
},
B: {
name: "Ivan"
}
}
// Outputs an array with [KEY, VALUE]
console.log('entries:', _.entries(obj))
console.log('toPairs:', _.toPairs(obj))
// Outputs array with objects containing the keys and values
console.log('entries:', _.map(_.entries(obj), ([k, v]) => ({
[k]: v
})))
console.log('keys:', _.map(_.keys(obj), k => ({
[k]: obj[k]
})))
console.log('transform:', _.transform(obj, (r, c, k) => r.push({
[k]: c
}), []))
console.log('reduce:', _.reduce(obj, (r, c, k) => (r.push({
[k]: c
}), r), []))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
위의 예에서는 ES6이 사용됩니다 (화살표 기능 및 동적 속성). _.fromPairs
ES6이 문제인 경우 lodash 및 기타 방법을 사용 하여 객체를 작성할 수 있습니다 .
답변
키 (이 경우 ID)를 각 배열 항목의 속성으로 유지하려면 다음을 수행하십시오.
const arr = _(obj) //wrap object so that you can chain lodash methods
.mapValues((value, id)=>_.merge({}, value, {id})) //attach id to object
.values() //get the values of the result
.value() //unwrap array of objects
답변
2017 업데이트 : Object.values , lodash 값 및 toArray 가 수행합니다. 그리고 키 맵 을 유지 하고 연산자를 멋지게 퍼 뜨리 려면 :
// import { toArray, map } from 'lodash'
const map = _.map
const input = {
key: {
value: 'value'
}
}
const output = map(input, (value, key) => ({
key,
...value
}))
console.log(output)
// >> [{key: 'key', value: 'value'}])
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>