Упрощенный ответ: если поток A обновляет поле, а затем освобождает блокировку, то поток B будет гарантированно видеть обновление после того, как поток B приобретет ту же блокировку.
Обратите внимание: «отпустите блокировку «означает выход из блока synchronized
, а« получение той же блокировки »означает синхронизацию на одном и том же объекте.
Вот:
_.map(data.stats, obj => [ obj.points, obj.pos ])
Редактировать: @ Хасан Имам сделал интересный ответ, используя разрушающий объект
Вы в значительной степени поняли это, вам просто нужно объединить вашу нативную версию с вашей lodash
попыткой:
var result = _.map(data.stats, o => [o.points, o.pos]);
Как видите, я заменил второй параметр в _.map
(который был 'points'
) с функцией, используемой в вашей собственной версии.
Вы можете использовать object#destructring
в функции обратного вызова.
let data = {"_id":"93866","stats":[{"points":86,"pos":11,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":79,"pos":26,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":64,"pos":39,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"}]},
result = _.map(data.stats, ({points, pos}) => [points,pos]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Вы можете использовать _.at()
Лодаша с _.map()
:
const data = {"_id":"93866","stats":[{"points":86,"pos":11,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":79,"pos":26,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":64,"pos":39,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"}]};
const result = _.map(data.stats, o => _.at(o, ['points', 'pos']));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Вы также можете использовать lodash / fp версии _.map()
и _.at()
для создания функции:
const data = {"_id":"93866","stats":[{"points":86,"pos":11,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":79,"pos":26,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"},{"points":64,"pos":39,"createdAt":"2019-01-16T10:13:40.650Z","updatedAt":"2019-01-16T10:13:40.825Z"}]};
const fn = _.map(_.at(['points', 'pos']));
const result = fn(data.stats);
console.log(result);
[ 113]