Я пытаюсь использовать ajv, чтобы гарантировать, что массив придерживается строгих правил о том, что является допустимым значением.Я не уверен, какие модификации или дополнительные ключевые слова использовать, чтобы добиться результата, который я ищу.Можно использовать некоторые идеи.
Примечание: у меня это работает по-другому, без использования проверки JSONSchema.Мне было просто любопытно, можно ли использовать валидацию JSONSchema для достижения той же цели.
Правила таковы:
- Он может содержать любое количество элементов, нас интересуют только индексы 0 и1.
- Первый элемент, индекс 0, должен быть строкой.
- Второй элемент, индекс 1, должен быть объектом.
- Если элемент с индексом 0или 1, независимо от длины массива, является допустимым для любого индекса, вставьте значение по умолчанию для другого элемента в соответствующем индексе.
- Если в массиве нет элементов, вставьте оба значения по умолчанию в соответствующемindex.
Вот фрагмент кода, который, надеюсь, объясняет, чего я пытаюсь достичь.Благодарю.
const schema = {
"type": "array",
"items": [
{
"type": "string",
"default": ""
},
{
"type": "object",
"default": {}
}
]
};
function fn( array ) {
ajv.validate( schema, array );
console.log( array );
}
fn([]);
fn([ '1' ]);
fn([ { bar: 2} ]);
fn([ 'word', { foo: 3 } ]);
fn([ 'word', 42 ]);
fn([ [ 1, 2, 3 ], { baz: 4 } ]);
fn([ 'word', { a: 1, b: 2 }, 42 ]);
// Actual results:
// [ '', {} ] => Expected
// [ '1', {} ] => Expected
// [ { bar: 2 }, {} ] => Not what I want
// [ 'word', { foo: 3 } ] => Expected
// [ 'word', 42 ] => Not what I want
// [ [ 1, 2, 3 ], { baz: 4 } ] => Not what I want
// [ 'word', { a: 1, b: 2 }, 42 ] => Expected, indices 0 and 1 are all I care about
// Desired results:
// [ '', {} ]
// [ '1', {} ]
// [ '1', { bar: 2 } ]
// [ 'word', { foo: 3 } ]
// [ 'word', {} ]
// [ '', { baz: 4 } ]
// [ 'word', { a: 1, b: 2 }, 42 ]