我正在IE11中运行下面的脚本,没有任何编译器。但是,它返回一个“期望的标识符”错误。
var result = Object.values(response.data.reduce(function(r, { boxm, model_no, model_name, qty, type }, index, array) {
r[boxm] = r[boxm] || { boxm: boxm, lines: [] }
r[boxm].lines.push({ model_no: model_no.toString(), model_name: model_name, qty: qty, type: type })
return r
}, {}))
我猜想它一定是reduce函数中的{ boxm, model_no, model_name, qty, type }
部分。
有人知道如何将其转换为ES5友好语法。
答案 0 :(得分:1)
不支持的部分肯定是解构性的,还有Object.values
。
为了确定您可以使用或不使用什么,有一个网站:
https://caniuse.com/#search=Object.values
var obj = response.data.reduce(function(r, data, index, array) {
r[data.boxm] = r[data.boxm] || {
boxm: data.boxm,
lines: [],
};
r[data.boxm].lines.push({
model_no: data.model_no.toString(),
model_name: data.model_name,
qty: data.qty,
type: data.type,
});
return r;
}, {});
var result = Object.keys(obj).map(function(x) {
return obj[x];
});
答案 1 :(得分:0)
这称为解构,它是ECMAScript 6语法。 Object.values
和动态属性名称也不被支持。这是完整的ES5版本:
//Note that I'm creating Object.values here to make the rest of the code simpler
Object.prototype.values = function(obj) {
return Object.keys(obj).map(function(key) {
return obj[key];
});
};
var result = Object.values(response.data.reduce(function(r, curr, index, array) {
if (!r[curr.boxm]) {
r[curr.boxm] = {
boxm: curr.boxm,
lines: []
}
}
r[curr.boxm].lines.push({
model_no: curr.model_no.toString(),
model_name: curr.model_name,
qty: curr.qty,
type: curr.type
});
return r;
}, {}));