_.orderBy свойство вложенного объекта, кратное lodash - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот массив:

[{
    "group": "admin",
    "menuorder": 8,
    "screen": [{
        "role": "name4",
        "order": 1,
        "ui": [{
          "info": "Grey",
          "name": "Dog",
          "MenuOrder": 5
        }]
      },
      {
        "role": "name1",
        "order": 9,
        "ui": [{
            "info": "white2",
            "name": "Cat2",
            "MenuOrder": 2
          },
          {
            "info": "white1",
            "name": "Cat1",
            "MenuOrder": 1
          }
        ]
      }
    ]
  },
  {
    "group": "client",
    "menuorder": 6,
    "screen": [{
      "role": "name2",
      "order": 3,
      "ui": [{
        "info": "Grey",
        "name": "goldfish",
        "MenuOrder": 2
      }]
    }]
  }
]

Я хочу заказать позицию этого раздела из MenuOrder 1, 2, 3 ...

{
  "role": "name1",
  "order": 9,
  "ui": [{
      "info": "white2",
      "name": "Cat2",
      "MenuOrder": 2
    },
    {
      "info": "white1",
      "name": "Cat1",
      "MenuOrder": 1
    }
  ]
}

Вот этот мой код,Любая помощь от всех очень полезна для меня.Спасибо.

let sorts = _.orderBy(result, function(e) { 
  return _.orderBy(e.screen.ui, function(c) {
   c.MenuOrder
  }, ['asc']);
}, ['asc']);

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете использовать _.cloneDeepWith для создания полного клона, но с функцией обратного вызова (настройщиком), которая будет обрабатывать значения свойств ui по-разному: она вернет отсортированную версию:

const result = [{"group": "admin","menuorder": 8,"screen": [{"role": "name4","order": 1,"ui": [{"info": "Grey","name": "Dog","MenuOrder": 5}]},{"role": "name1","order": 9,"ui": [{"info": "white2","name": "Cat2","MenuOrder": 2},{"info": "white1","name": "Cat1","MenuOrder": 1}]}]},{"group": "client","menuorder": 6,"screen": [{"role": "name2","order": 3,"ui": [{"info": "Grey","name": "goldfish","MenuOrder": 2}]}]}];

const sorted = _.cloneDeepWith(result, v => {
    if (_.has(v, "ui")) return _.assign({}, v, { ui: _.sortBy(v.ui, "MenuOrder") });
});

console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...