我有一个对象数组,它是通过从csv文件中提取数据而创建的。该数组如下所示(打印时)。
Array[4]
0:Object
value1:"200"
value2:"95"
value3:"6395"
value4:"2"
1:Object
2:Object
3:Object
我创建它的方式如下。
var strCSV = e.target.result;
var arrCSV = strCSV.match(/[\w .]+(?=,?)/g);
var noOfCols = 4;
// To ignore the first row which is header
var hdrRow = arrCSV.splice(0, noOfCols);
var data = [];
while (arrCSV.length > 0) {
var obj = {};
// extract remaining rows one by one
var row = arrCSV.splice(0, noOfCols)
for (var i = 0; i < row.length; i++) {
obj[hdrRow[i]] = row[i].trim();
}
// push row to an array
data.push(obj)
}
现在让我们说我想要创建另一个对象数组,它们具有相同的数据值,但键不同。
var tableData = [
{key1: "", key2: "", key3: "", key4: ""}];
我尝试过不同的方法,但我还没能做到。例如,我尝试了以下内容。
for(var i=0; i<data.length; i++){
console.log(i);
tableData[i]["key1"] = data[i].value1;
}
或类似形式的东西。我创建了一个空数组tableData = [],认为在现场创建元素可以解决问题,但它不会。反正有没有这样做?我不能只创建一个对象并逐个复制第一个数组中的所有元素,因为第一个数组中的元素数量可能是任何东西。
答案 0 :(得分:2)
创建一个新对象,然后将其附加到tableData数组。
for(var i=0; i<data.length; i++){
console.log(i);
var newData = { "key1" : data[i].value1 };
tableData.push(newData);
}
答案 1 :(得分:1)
// declare array
var tableData = [];
for (...) {
// create new object
var obj = { key1: "", key2: "" };
// add obj to array
tableData.push(obj);
}
答案 2 :(得分:1)
在您首次将对象放入tableData[i]["key1"]
之前,您无法分配到tableData[i]
。
for(var i=0; i<data.length; i++){
console.log(i);
tableData[i] = {};
tableData[i]["key1"] = data[i].value1;
}
您还可以组合对象初始化和属性赋值:
for(var i=0; i<data.length; i++){
console.log(i);
tableData[i] = {key1: data[i].value1};
}
答案 3 :(得分:1)
试试这个:
for(var i=0; i<data.length; i++){
console.log(i);
var obj = { "key1": data[i].value1, "key2": data[i].value2};
tableData.push(obj);
}
答案 4 :(得分:1)
为什么不直接将csv标头中的密钥分配给对象?这样你只需要解析一次,不需要额外的循环和工作..
var csv = `foo,bar,baz\na,b,c\nd,e,f\ng,h,i`;
function parseCsv(str) {
let split = str.split("\n");
let header = split.shift().split(',');
let res = [];
split.forEach((line) => {
let o = {};
line.split(',').forEach((el, i) => {
o[header[i]] = el;
})
res.push(o);
});
return res;
}
console.log(parseCsv(csv));
或者,如果您要分配不同的标题:
let csv = `foo,bar,baz\na,b,c\nd,e,f\ng,h,i`;
let header = ["head1", "head2", "head3"];
function parseCsv(str) {
let split = str.split("\n");
split.shift();
let res = [];
split.forEach((line) => {
let o = {};
line.split(',').forEach((el, i) => {
o[header[i]] = el;
})
res.push(o);
});
return res;
}
console.log(parseCsv(csv));
答案 5 :(得分:1)
您可以使用以下代码创建随机对象和值的数组。 首先,使用 12 是 length 的位置创建数组,然后使用对象。
data=Array.from({length:12},()=>(
{id:Math.floor(Math.random()*(100-1))+1,
name:Math.random().toString(36).substr(2,10)
}
)
)
console.log(data)