[英]Set First Value as Key in Javascript Array
根据选定的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没有关联数组,所以我对如何生成这个有点困惑。
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);
我们可以使用对象解构和扩展运算符以方便使用。 在下面的示例中, 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)
只需从data
提取所需的值,然后将它们放入一个格式化的对象中:
const data = [["baseball","Noun","Singular","","","","",""]]; const firstArr = data[0]; const transformedFirstObject = { [firstArr[0]]: [firstArr[1], firstArr[2]], }; console.log(transformedFirstObject);
但是拥有一个只有一个这样的属性的对象真是太奇怪了。 如果您的data
可能包含多个子数组,并且您希望将数组数组转换为对象数组,请使用map
:
const data = [ ["baseball","Noun","Singular","","","","",""], ["foo","bar","baz","","","","",""] ]; const transformed = Object.assign(...data.map(([prop, value1, value2]) => ({ [prop]: [value1, value2] }))); console.log(transformed);
与其他答案相比,这有点简单,但同样有效。
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))
只需使用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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.