对象解构和分配

时间:2019-04-17 14:15:38

标签: javascript ecmascript-6

我有一个对象json,我想将其 some 个属性分配给另一个对象stn

stn.closingTime = json.closingTime
stn.contactEmail = json.contactEmail
stn.contactPhone = json.contactPhone
stn.openingTime = json.openingTime
stn.priceFrom = json.priceFrom
stn.priceTo = json.priceTo

我知道是否只想在全局对象上下文中拥有这些属性

{closingTime, contactEmail, contactPhone, etc....} = json

但是如何将这些属性分解为另一个命名对象? (在这种情况下,{stn

6 个答案:

答案 0 :(得分:1)

尝试一下:

const json = { closingTime: 'closingTime', contactEmail: 'contactEmail', contactPhone: 'contactPhone', openingTime: 'openingTime', priceFrom: 'priceFrom', priceTo: 'priceTo' };
const {
  contactPhone,
  openingTime,
  priceFrom,
  ...rest } = json;

const stn = {
  contactPhone,
  openingTime,
  priceFrom,
};
console.log(stn);

答案 1 :(得分:1)

您可以创建一个函数并使用“分解函数的参数”。以下是从obj获取ab道具的示例代码。

const obj = {a:'a',b:'b',c:'c'};
const stn = (({a,b}) => ({a,b}))(obj)
console.log(stn)

答案 2 :(得分:1)

您可以在keys中创建所需的stn数组。然后像这样使用Object.fromEntries()

Object.fromEntries(keys.map(k => [k, json[k]]))

演示:

const input = {
  closingTime: 'closing',
  contactEmail: 'Email',
  contactPhone: 'Phone',
  openingTime: 'Time',
  priceFrom: 'From',
  priceTo: 'To'
};

const getPartial = (obj, keys) => Object.fromEntries(keys.map(k => [k, obj[k]]))

console.log(getPartial(input, ['closingTime', 'contactEmail' ]))
console.log(getPartial(input, ['contactPhone', 'priceFrom', 'priceTo' ]))

答案 3 :(得分:0)

如果您要从json复制属性的 all ,则可以使用stn = {...json};

但是,由于您只想从json复制属性的 some 个,所以您要做的几乎是goto。

答案 4 :(得分:0)

您可以像这样使用aliases

// Grabs obj.x as as { otherName }
const { x: otherName } = obj;

参考:https://davidwalsh.name/destructuring-alias

答案 5 :(得分:0)

您可以创建一个def main(): intermediate_result = ne.evaluate('where(1 > 9, 9, 1) == 0') result = ne.evaluate(f'where((1 > 9) & {intermediate_result}, 2, 3)') print(f'Result: {result}') 函数,该函数从一个对象的键列表创建一个新对象。通过检查原始对象中是否存在键数组,将其减少为一个新对象,并将其添加,并将其各自的值添加到累积对象中。

pickBy

如果您需要原始对象的许多属性,则可以使用解构和rest参数来获取没有所需属性的新对象。

const input = {
  closingTime: 'closing',
  contactEmail: 'Email',
  contactPhone: 'Phone',
  openingTime: 'Time',
  priceFrom: 'From',
  priceTo: 'To'
}

const pickBy = (obj, keys) => keys.reduce((r, k) => k in obj ? { 
  ...r, [k]: obj[k] 
} : obj, {})

console.log(pickBy(input, ['closingTime', 'contactEmail']))
console.log(pickBy(input, ['contactPhone', 'priceFrom', 'priceTo']))