【问题标题】:JavaScript object property containing dot [closed]包含点的 JavaScript 对象属性 [关闭]
【发布时间】:2022-07-07 00:17:04
【问题描述】:

我正在尝试使用 lodash orderBy 函数对对象数组进行排序。 当迭代的中间包含一个点时,orderBy 不再起作用。

这是一个可以更好地解释问题的 plunker。 plunker

ar users = [
     { 'user': 'fred',   'age': 48 },
     { 'user': 'barney', 'age': 34 },
     { 'user': 'fred',   'age': 40 },
     { 'user': 'barney', 'age': 36 }
];

_.orderBy(users, ['user', 'age'], ['asc', 'desc']);

任何帮助将不胜感激。

提前谢谢你。

【问题讨论】:

标签: javascript angularjs lodash


【解决方案1】:

您可以创建一个访问奇异键名的函数。

const
    getPDot = o => o.value['p.'].val,
    data = [{ id: 'b', value: { 'p.': { val: 2 } } }, { id: 'a', value: { 'p.': { val: 1 } } }, { id: 'c', value: { 'p.': { val: 3 } } }];


console.log(_.orderBy(data, [getPDot], ['asc']));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

key 上具有闭包的动态方法。

const
    getValue = key => o => o.value[key].val,
    data = [{ id: 'b', value: { 'p.': { val: 2 } } }, { id: 'a', value: { 'p.': { val: 1 } } }, { id: 'c', value: { 'p.': { val: 3 } } }];


console.log(_.orderBy(data, [getValue('p.')], ['asc']));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

ES5

const
    getValue = function (key) {
        return function (o) {
            return o.value[key].val;
        };
    }
    data = [{ id: 'b', value: { 'p.': { val: 2 } } }, { id: 'a', value: { 'p.': { val: 1 } } }, { id: 'c', value: { 'p.': { val: 3 } } }];


console.log(_.orderBy(data, [getValue('p.')], ['asc']));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-05-12
  • 2017-07-17
  • 2022-07-21
  • 1970-01-01
  • 2012-04-28
  • 2016-01-12
  • 2013-05-13
  • 1970-01-01
相关资源
最近更新 更多