如何在ES6中将Javascript中的对象数组分解为两个预定义变量?

时间:2018-10-03 12:51:06

标签: javascript arrays ecmascript-6 javascript-objects destructuring

我有一个数组,其中包含一个这种形式的对象: Array = [{type:type,message:message}]

我不断收到ESLint错误,要求我使用对象分解和数组分解。

当前我的代码如下:

let type=null;
let message=null;
if (data.length > 0) {
  ({ type, message } = data[0]);
}

到目前为止,此方法有效,并且正确分配了我的变量,但是我仍然从ESLint收到“使用数组分解”消息。

任何对此的帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:2)

您可以解构数组:

let type=null;
let message=null;
if (data.length > 0) {
  [{ type, message }] = data;
}

上面的代码是以下代码的简化版本:

[ firstElement ] = data;  // array destructruring
({ type, message } = firstElement);  // object destructuring

答案 1 :(得分:1)

Faly's way很好。您还可以在进行销毁时使用默认值:

function test(label, data) {
  // 1 -----------------------------vvvvv
  let [{type = null, message = null} = {}] = data;
  // 2 -----^^^^^^^---------^^^^^^^
  console.log(label, type, message);
}
test("test1: ", []);
test("test2: ", [{type: "t"}]);
test("test3: ", [{type: "t", message: "m"}]);

之所以可行,是因为如果data.length0data[0]undefined,并因此触发了对数组使用默认值{}(1)部分在对象部分中,我们也使用null(2)来处理对象上所有丢失的值。

答案 2 :(得分:1)

EsLint要您写

let type = null;
let message = null;
if (data.length > 0) {
  [{ type, message }] = data;
}

将可迭代data的第一项分解为{type, message}目标。 (更多项目将被忽略)。

但是我建议对空的情况使用默认值:

const [{type, message} = {type:null, message:null}] = data;

或者也是

const [{type = null, message = null} = {}] = data;