繁体   English   中英

将第一个值设置为Javascript数组中的键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM