根据选定的DataTables行创建数组
$('#savenlp').click(recordjourney);
function recordjourney() {
var data = table.rows(['.selected']).data().toArray();
console.log( (data) );
console.log( JSON.stringify(data) );
}
data
返回
0 : (8) ["Which", "TitleCase", "QuestionWord", "", "", "", "", ""]
JSON.stringify(data)
返回
[["baseball","Noun","Singular","","","","",""]]
此信息是动态生成的,所以我只想取第一个值(在本例中为baseball
)并将其转换为类似
"baseball": [
"Noun",
"Singular"
]
我可以返回第一个值(我想要使用的键)
alert(data[0][0]);
我在PHP方面更擅长,但我越来越多地学习javascript / jquery。
这是我的理解javascript没有关联数组,所以我对如何生成它有点困惑。
答案 0 :(得分:4)
const data = [
["baseball","Noun","Singular","","","","",""],
["baseballs","Noun","","Plural","","","","",]
];
const mappedData = data.reduce((acc, row) => { acc[row.shift()] = row.filter(d => d !== ''); return acc; }, {});
console.log(mappedData);
答案 1 :(得分:4)
我们可以使用对象解构和扩展运算符以方便使用。
在下面的示例中,key
将是第一个项目,所有其余项目将放在newData
变量中
const data = [["baseball","Noun","Singular","","","","",""]];
const [key, ...newData] = data[0]
// if you want the new data to not have empty entries, simple apply the filter
const newDataFiltered = newData.filter(item => !!item)
const objWithEmpty = {[key]: newData}
const objWithoutEmpty = {[key]: newDataFiltered}
console.log(objWithEmpty, objWithoutEmpty)
对于外部数组中的多个数组,只需将整个逻辑包含在for循环中
const data = [
["baseball","Noun","Singular","","","","",""],
["baseball1","Noun1","Singular1","","","","",""],
["baseball2","Noun2","Singular2","","","","",""]
];
const objWithEmpty = {}
const objWithoutEmpty = {}
data.forEach((array) => {
const [key, ...newData] = array
// if you want the new data to not have empty entries, simple apply the filter
const newDataFiltered = newData.filter(item => !!item)
objWithEmpty[key] = newData
objWithoutEmpty[key] = newDataFiltered
})
console.log(objWithEmpty, objWithoutEmpty)
答案 2 :(得分:2)
只需从{
"rules": {
"camelcase": [2, {"properties": "never"}]
}
}
中提取所需的值,然后将它们放入您喜欢的格式化对象中:
data
但是拥有一个只有一个属性的对象真是太奇怪了。如果您的const data = [["baseball","Noun","Singular","","","","",""]];
const firstArr = data[0];
const transformedFirstObject = {
[firstArr[0]]: [firstArr[1], firstArr[2]],
};
console.log(transformedFirstObject);
中可能包含多个子数组,并且您希望将数组数组转换为对象数组,请使用data
:
map
答案 3 :(得分:2)
与其他答案相比有点简单,但同样有效。
const data = [
["baseball","Noun","Singular","","","","",""],
["baseball1","Noun1","Singular1","","","","",""],
["baseball2","Noun2","Singular2","","","","",""]
];
const obj = [];
data.forEach(function(i) {
let jsonObj = {};
jsonObj [i[0]] = i.slice(1).filter(x=>x !='');
obj.push(jsonObj)
});
console.log(JSON.stringify(obj))
答案 4 :(得分:1)
考虑多个数组元素,只需使用forEach
。
var obj = {};
var arr = [
["baseball", "Noun", "Singular", "", "", "", "", ""],
["Test", "Test1", "Test2", "", "", "", "", ""]
];
arr.forEach(function(val, idx) {
val.forEach(function(val1, idx1) {
if (idx1 === 0) {
obj[val1] = val.slice(1, val.length)
}
})
})
console.log(JSON.stringify(obj))