JS中数组元素赋值错误



我正在尝试将列表数据存储到从axios响应接收的对象中。第一组数据是标题,我将cols存储为数组,其余的存储为行。接收到的数据都是定义的,在解析之后,它被完美地记录在控制台中。在循环中,当加载行元素开始时,第一组元素被存储,但对于下一组元素,即对于i = 2的值,我得到错误说不能设置未定义的属性(设置0).

为方便起见,我更改了从axios接收的数据类型

let response = {data:'"A","B"n"C","D"n"E","F"'} //await axios(URL)
let raw = response.data.split(/r?n/);
let data = {
cols:[],
rows:[]   // I have tried rows:[[]] or rows:[{v:[]}]
}
for (let i in raw) {
raw[i] = raw[i].split(",");
for(let j in raw[i]){
raw[i][j] = raw[i][j].replace(/"/g, '')
if (i==0)
data.cols[j]=raw[i][j]
else{
data.rows[i-1][j]=raw[i][j] // for rows as object => data.rows[i-1].v[j]
//console.log(i+'->'+data.rows[i-1])
}
}        
}
return data // this is not matter of concern
}   

我已经尝试将行数组声明为2D数组,但错误仍然存在。将鼠标悬停在对象上将得到rows(属性):never[]和cols。

你可以这样做:

const response = { data: '"A","B"n"C","D"n"E","F"' }
const [cols, ...rows] = response.data.split(/r?n/).map(r => r.match(/[A-Z]+/g))
const data = { cols, rows }
console.log(data)

你可以这样做

let response = {data:'"A","B"n"C","D"n"E","F"'}
const [cols, ...rows] = response.data.split('n').map(r => r.replace(/"/g, '').split(','))
const data = {
cols,
rows
}
console.log(data)

最新更新