关联数组问题

mkworld 2018-06-27 11:00:20
下面代码中JOSN customFieldsJson 放入 cards 数组里面


var customFieldsJson = [
{
"id": "11",
"name": "F1 ",
"customFieldItems": [
{
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001",
},
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002",

},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
},
{
"id": "22",
"name": "F2",
"customFieldItems": [
{

"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
}

];

var customFieldsRows = customFieldsJson.length;
var cards = [];
for(var i = 0; i < customFieldsRows; i++ ){

var id = customFieldsJson[i].id;
var name = customFieldsJson[i].name;
var customFieldItems_0 = customFieldsJson[i].customFieldItems[0].idValue;
var customFieldItems_1 = customFieldsJson[i].customFieldItems[1].idValue;
var customFieldItems_2 = customFieldsJson[i].customFieldItems[2].value.date;


var card = [
id,
name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2
];
cards.push(card);
}
console.log(cards);


console.log可以得到一下结果

(2) [Array(5), Array(5)]
0: (5) ["11", "F1 ", "5b14d6fc739d8f7582ab59cf", "5b14d6fc739d8f7582ab59ca", "2018-06-01T03:00:00.000Z"]
1: (5) ["22", "F2", "5b14d6fc739d8f7582ab59cf", "5b14d6fc739d8f7582ab59ca", "2018-06-01T03:00:00.000Z"]


如果customFieldsJson的数据是下面这种情况

var customFieldsJson = [
{
"id": "11",
"name": "F1 ",
"customFieldItems": [
{
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001",
},
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002",

},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
},
{
"id": "22",
"name": "F2",
"customFieldItems": [
/*
{

"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
*/
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
}

];


如何写 以下结果的验证判断

"idCustomField": "q000001"(没有情况下 idValue填空) 对应 customFieldItems_0,
"idCustomField": "q000002" 的 idValue 值 对应 customFieldItems_1,
"idCustomField": "q000003" 的 value 值 对应 customFieldItems_2

请求帮助
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mkworld 2018-06-28
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
可以改成对象 { 0:xxx,1:xxx,2:xxx }
这样有一个元素缺少的话,其它元素下标不变

var customFieldsJson = [
{
"id": "11",
"name": "F1 ",
"customFieldItems": {
0: {
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001",
},
1: {
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002",

},
2: {
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
}
},
{
"id": "22",
"name": "F2",
"customFieldItems": {
/*
0: {
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
*/
1: {
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
2: {
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
}
}

];

var customFieldsRows = customFieldsJson.length;
var cards = [];
for(var i = 0; i < customFieldsRows; i++ ){

var id = customFieldsJson[i].id;
var name = customFieldsJson[i].name;
var customFieldItems_0 = "";
var customFieldItems_1 = "";
var customFieldItems_2 = "";
if (customFieldsJson[i].customFieldItems[0])
customFieldItems_0 = customFieldsJson[i].customFieldItems[0].idValue;
if (customFieldsJson[i].customFieldItems[1])
customFieldItems_1 = customFieldsJson[i].customFieldItems[1].idValue;
if (customFieldsJson[i].customFieldItems[2])
customFieldItems_2 = customFieldsJson[i].customFieldItems[2].value.date;


var card = [
id,
name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2
];
cards.push(card);
}
console.log(cards);


谢谢你的回答。
因为customFieldsJson的数据是接受到的JSON所以是无法修改成对象


{
"id": "22",
"name": "F2",
"customFieldItems": [
/*
{

"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
*/
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
}
天际的海浪 2018-06-27
  • 打赏
  • 举报
回复
可以改成对象 { 0:xxx,1:xxx,2:xxx }
这样有一个元素缺少的话,其它元素下标不变

var customFieldsJson = [
{
"id": "11",
"name": "F1 ",
"customFieldItems": {
0: {
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001",
},
1: {
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002",

},
2: {
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
}
},
{
"id": "22",
"name": "F2",
"customFieldItems": {
/*
0: {
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
*/
1: {
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
2: {
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
}
}

];

var customFieldsRows = customFieldsJson.length;
var cards = [];
for(var i = 0; i < customFieldsRows; i++ ){

var id = customFieldsJson[i].id;
var name = customFieldsJson[i].name;
var customFieldItems_0 = "";
var customFieldItems_1 = "";
var customFieldItems_2 = "";
if (customFieldsJson[i].customFieldItems[0])
customFieldItems_0 = customFieldsJson[i].customFieldItems[0].idValue;
if (customFieldsJson[i].customFieldItems[1])
customFieldItems_1 = customFieldsJson[i].customFieldItems[1].idValue;
if (customFieldsJson[i].customFieldItems[2])
customFieldItems_2 = customFieldsJson[i].customFieldItems[2].value.date;


var card = [
id,
name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2
];
cards.push(card);
}
console.log(cards);
天际的海浪 2018-06-27
  • 打赏
  • 举报
回复
数组元素下标是自动递增的,你前面少一个元素,后面的元素下标都会减一。
"idCustomField": "q000001"没有情况下, "idCustomField": "q000002"就变成第一个元素了,
ambit_tsai-微信 2018-06-27
  • 打赏
  • 举报
回复

function getItemByField(items, value){
for(var i=0, len=items.length; i<len; ++i){
if(items[i].idCustomField === value){
return items[i];
}
}
}

var customFieldsRows = customFieldsJson.length;
var cards = [];
for(var i = 0; i < customFieldsRows; i++ ){

var id = customFieldsJson[i].id,
name = customFieldsJson[i].name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2,
item;

// 从customFieldItems找出含'q000001'的记录
item = getItemByField(customFieldsJson[i].customFieldItems, 'q000001');
if(item){
customFieldItems_0 = item.idValue;
}else{
customFieldItems_0 = '';
}
item = getItemByField(customFieldsJson[i].customFieldItems, 'q000002');
customFieldItems_1 = item.idValue;
item = getItemByField(customFieldsJson[i].customFieldItems, 'q000003');
customFieldItems_1 = item.value.date;

var card = [
id,
name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2
];
cards.push(card);
}
console.log(cards);

mkworld 2018-06-27
  • 打赏
  • 举报
回复
引用 1 楼 ambit_tsai 的回复:
不知所云啊,兄得


运行下面的代码出现这样的错误说面
VM72:86 Uncaught TypeError: Cannot read property 'value' of undefined
at window.onload (VM72:86)
如何修改得到下面数组

(2) [Array(5), Array(5)]
0: (5) ["11", "F1 ", "5b14d6fc739d8f7582ab59cf", "5b14d6fc739d8f7582ab59ca", "2018-06-01T03:00:00.000Z"]
1: (5) ["22", "F2", "", "5b14d6fc739d8f7582ab59ca", "2018-06-01T03:00:00.000Z"]


运行代码↓

var customFieldsJson = [
{
"id": "11",
"name": "F1 ",
"customFieldItems": [
{
"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001",
},
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002",

},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
},
{
"id": "22",
"name": "F2",
"customFieldItems": [
/*
{

"idValue": "5b14d6fc739d8f7582ab59cf",
"idCustomField": "q000001"
},
*/
{
"idValue": "5b14d6fc739d8f7582ab59ca",
"idCustomField": "q000002"
},
{
"value": {
"date": "2018-06-01T03:00:00.000Z"
},
"idCustomField": "q000003",
}
]
}

];

var customFieldsRows = customFieldsJson.length;
var cards = [];
for(var i = 0; i < customFieldsRows; i++ ){

var id = customFieldsJson[i].id;
var name = customFieldsJson[i].name;
var customFieldItems_0 = customFieldsJson[i].customFieldItems[0].idValue;
var customFieldItems_1 = customFieldsJson[i].customFieldItems[1].idValue;
var customFieldItems_2 = customFieldsJson[i].customFieldItems[2].value.date;


var card = [
id,
name,
customFieldItems_0,
customFieldItems_1,
customFieldItems_2
];
cards.push(card);
}
console.log(cards);

ambit_tsai-微信 2018-06-27
  • 打赏
  • 举报
回复
不知所云啊,兄得

87,964

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧