比lodash链更好,更高效

时间:2018-04-12 14:20:42

标签: javascript ecmascript-6

我在一些论坛上读到,应尽可能避免使用lodash链以获得更好的性能和代码的可读性。那么有没有办法在集合上使用本机javascript函数来替换此代码。

RadG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId != -1 && isChecking) {
                    isChecking = false;
                    RadG1.clearCheck();
                }
                isChecking = true;
            }
        });

        RadG1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId != -1 && isChecking) {
                    isChecking = false;
                    RadG.clearCheck();
                }
                isChecking = true;
            }
        });

像这样的东西,但是我不确定它是否会给它带来任何附加价值

_(userCollection).chain()
        .map('name')
        .compact()
        .uniq()
        .value();

2 个答案:

答案 0 :(得分:2)

我相信这是你正在寻找的。不需要lodash。

lodash.map可以更改为Array.prototype.map

lodash.compact可以更改为Array.prototype.filter

lodash.uniq可以更改为Set构造函数,并可选择再次转换为数组。



const users = [
  {name: 'Me'},
  {name: 'Someone Else'},
  {name: 'Someone Else'},
  {name: ''},
];

const uniqueNames = Array.from(new Set(users
  .map(user => user.name)
  .filter(name => name)));

console.log(uniqueNames);




答案 1 :(得分:1)

您可以使用_.flow()来运行一系列方法:

const arr = [{ name: 'John' }, {}, { name: 'Smith' }, {}, { name: 'John' }, { name: 'Smith' }] 

const getUniqeNames = _.flow([
    _.partialRight(_.map, 'name'),
    _.compact,
    _.uniq
]);

const result = getUniqeNames(arr);

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