JavaScript数组首值设为键及DataTables选中行数组处理问题
解决DataTables选中行数据转键值对的问题
嘿,我明白你要做的事了——把DataTables选中行里每个数组的第一个元素作为键,把对应行的数据转成键值对形式对吧?我来给你调整代码实现这个需求。
首先先看你的原代码,table.rows('.selected').data().toArray()返回的是一个二维数组(哪怕只选中一行,结构也是[[元素1, 元素2, ...]]),所以我们需要遍历这个二维数组,把每行的第一个元素抽出来当键,剩下的内容作为对应的值。
修改后的代码示例
$('#savenlp').click(recordjourney); function recordjourney() { // 获取选中行的二维数组数据 var data = table.rows('.selected').data().toArray(); // 创建空对象来存储最终的键值对 var keyValueResult = {}; // 遍历每一行选中的数据 data.forEach(row => { // 取当前行的第一个元素作为键 const rowKey = row[0]; // 将整行数据作为值存入对象;如果只需要第一个元素之后的内容,就改成 row.slice(1) keyValueResult[rowKey] = row; }); // 输出结果看看 console.log('键值对对象:', keyValueResult); console.log('JSON格式结果:', JSON.stringify(keyValueResult)); }
代码细节说明
- 如果你希望值只包含第一个元素之后的内容(比如示例里只保留
["Noun","Singular","","","","","",""]而不是整行),只需要把row改成row.slice(1)就行,这样输出的JSON会是{"baseball":["Noun","Singular","","","","","",""]}。 - 如果存在多行选中且有重复的键(比如两行的第一个元素都是
baseball),后面的行会覆盖前面的。如果你想保留所有重复键的数据,可以改成用数组存储:var keyValueResult = {}; data.forEach(row => { const rowKey = row[0]; // 如果键不存在,先初始化一个空数组 if (!keyValueResult[rowKey]) { keyValueResult[rowKey] = []; } // 把当前行数据推入数组 keyValueResult[rowKey].push(row); // 同样可以换成 row.slice(1) });
测试效果
当你的选中行数据是["baseball","Noun","Singular","","","","",""]时,用第一个代码示例输出的JSON会是:
{"baseball":["baseball","Noun","Singular","","","","",""]}
如果用row.slice(1),输出就是:
{"baseball":["Noun","Singular","","","","","",""]}
内容的提问来源于stack exchange,提问作者Brian Bruman
相关产品推荐
相关产品推荐

