Javascript/ES6 从对象数组中解析值

标签 javascript ecmascript-6

<分区>

我想编写一个通用解析器,它接受一个值,然后键入并返回给定值的标签。

目前,这是我的代码:

import a from "../constants/a"
import b from "../constants/b"
import c from "../constants/c"

const find = (value, fromArray) => fromArray.find((term) => term.value === value);
const getLabel = (of, fromArray) => {
    const value = find(of, fromArray);
    return (value && value.label) || 'No info';
};


export default (value, type) => {
    switch (type) {
        case 'paymentMethod':
            return getLabel(value, paymentMethods);
        case 'paymentTerm':
            return getLabel(value, paymentTerms);
        case 'dateType':
            return getLabel(value, dateTypes);
        default:
            return 'No info';
    }
}

还有什么比 ES6 更快速、更简洁的方式来实现这一点?

最佳答案

代替独立数组 paymentMethods 等,您可以使用由您的 case 索引的对象,这样您就可以使用对象查找,这非常简洁,而不是 switch:

const obj = {
  paymentMethod: [ < paymentMethodArray> ],
  paymentTerm: [ < paymentTermArray> ],
  dateType: [ < dateTypeArray> ],
};
export default (value, type) => {
  const arr = obj[type];
  return arr
    ? getLabel(value, arr)
    : 'No info';
}

另外,不完全是你问的是什么,而是你的

return (value && value.label) || 'No info';

有点令人困惑,因为您正在使用 && 计算一个值不是 bool 值 - 您可以考虑改用条件运算符:

return value
  ? value.label
  : 'No info';

关于Javascript/ES6 从对象数组中解析值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999442/

相关文章:

javascript - 提交后如何隐藏表单?

javascript - Google Polymer 中的 DOM 脚本

javascript - 使用著名的框架制作模糊动画

javascript - ES6 类和类实例作为构造函数中的参数

JavaScript:如何通过解构从嵌套对象中复制一些键

ecmascript-6 - jspm 不会将代码从 ES6 转换为 ES5

javascript - JS 类 : avoiding manually assigning class variables

javascript - 将现有函数声明为异步?

javascript - Facebook评论框位置

javascript - 在 Vue 中调用方法时的括号