Преобразование данных Javascript - PullRequest
1 голос
/ 21 марта 2019

Входные данные:

     {
    "8": [{
        "a": true,
        "b": {
            "xyz": 1
        }
    }, {
        "a": false,
        "b": {
            "xyz": 2
        }
    }],
    "13": [{
        "b": {
            "xyz": 4
        }
    }]
 }

Выходные данные:

    {
    "8": [{
        "b": {
            "xyz": 2
        }
    }]
 }

Как удалить первый элемент каждого ключа и вернуть несколько ключей одного и того же объекта, используя библиотеки javascript и lodash?

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

Без loadash сделать с Array#shift и Array#foreach

  1. Сначала преобразовать obj в массив, используя Object.keys
  2. Затем зациклите значение. И удалите первый индекс массива, используя Array#shift
  3. Затем применить условие с длиной массива 0, удалить пару ключ-значение из основного объекта

var obj = { "8": [{ "a": true, "b": { "xyz": 1 } }, { "a": false, "b": { "xyz": 2 } }], "13": [{ "b": { "xyz": 4 } }] };
Object.keys(obj).forEach(a => {
  obj[a].shift()
  obj[a] = obj[a];
  if(obj[a].length == 0)
   delete obj[a];
});
console.log(obj)
1 голос
/ 21 марта 2019

Вы можете использовать reduce записи, возвращаемые Object.entries(), например:

let obj={"8":[{"a":!0,"b":{"xyz":1}},{"a":!1,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]}

let output = Object.entries(obj).reduce((acc, [key, value]) => {
  if(value.length > 1)
    acc[key] = value.slice(1)
  
  return acc;
}, {})

console.log(output)

Если вы хотите изменить исходный объект, выполните цикл по объекту с помощью for...in и используйте shift иdelete как это:

let obj={"8":[{"a":!0,"b":{"xyz":1}},{"a":!1,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]}

for (let key in obj) {
  obj[key].shift()
  if (obj[key].length === 0)
    delete obj[key]
}

console.log(obj)
0 голосов
/ 21 марта 2019

Используйте lodash '_.flow() с _.partialRight(), чтобы создать функцию, которая отображает значения в хвост (все элементы, кроме 1-го) каждого массива, а затем использует _.omitBy() для удаления пустые ключи:

const { flow, partialRight: pr, mapValues, tail, omitBy, isEmpty } = _

const fn = flow(
  pr(mapValues, tail),
  pr(omitBy, isEmpty)
)

const data = {"8":[{"a":true,"b":{"xyz":1}},{"a":false,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]}

const result = fn(data)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

И терьер Лодаш / фп Версия:

const { flow, mapValues, tail, omitBy, isEmpty } = _

const fn = flow(
  mapValues(tail),
  omitBy(isEmpty)
)

const data = {"8":[{"a":true,"b":{"xyz":1}},{"a":false,"b":{"xyz":2}}],"13":[{"b":{"xyz":4}}]}

const result = fn(data)

console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
...