Javascript Functional - 获取一些对象属性的更好方法

时间:2017-01-04 13:10:04

标签: javascript functional-programming

有更好的方法吗?我想从对象返回特定属性。这种方式有效,但我认为这不是最好的方法。

target.formats.map(format => {
  const {
    id,
    format_type_id,
    payment_type,
    initial_date,
    final_date,
    estimated_audience,
    direction_type_id,
    price
  } = format

  return {
    id,
    format_type_id,
    payment_type,
    initial_date,
    final_date,
    estimated_audience,
    direction_type_id,
    price
  }
})

4 个答案:

答案 0 :(得分:1)

嗯,你可以用非常简单的方式做到这一点没有解构分配

target.formats.map(f => ({
  f.id,
  f.format_type_id,
  f.payment_type,
  f.initial_date,
  f.final_date,
  f.estimated_audience,
  f.direction_type_id,
  f.price
})

或者您可以编写一个选择某些属性的通用函数

const props = xs => y => {
  let acc = {}
  for (let x of xs) acc[x] = y[x]
  return acc;
}

target.formats.map(props([
  'id',
  'format_type_id',
  'payment_type',
  'initial_date',
  'final_date',
  'estimated_audience',
  'direction_type_id',
  'price'
]))

答案 1 :(得分:0)

您可以使用参数列表中的解构和一些额外的括号。

target.formats.map(({ id, format_type_id /* ... */ }) => ({ id, format_type_id /* ... */ }));

答案 2 :(得分:0)

所以你想只返回一个对象的特定属性?试试这个:



var bigObj = {a: 1, b: 2, c: 3, d: 4}

function keepProperties(props, obj) {
  var result = {}
  for (var i = 0; i < props.length; i++) {
    var prop = props[i]
    result[prop] = obj[prop]
  }
  return result;
}

console.log(keepProperties(["a", "c"], bigObj))
&#13;
&#13;
&#13;

所以你可以运行类似

的东西
target.formats.map(f => keepProperties(["id", "format_type_id"], f))

答案 3 :(得分:-1)

为什么不在对象上创建一个方法以格式返回它?

//Define object rules
var myClass = (function() {
  function myClass() {
    this.a = 1;
    this.date = new Date();
  }
  myClass.prototype.format = function() {
    return {
      a: this.a,
      d: this.date
    };
  };
  return myClass;
}());
//Create an object
var obj = new myClass();
//Log in format
console.log(obj.format());