#javascript #typescript #ecmascript-6 #commonjs
Вопрос:
в моем объекте
let obj = {
name:["Harry","Scren","Docis","Altab"],
age:[32,44,22,55]
}
Мне нужно записать самоисполняющуюся анонимную функцию в объекте, которая при вызове любого элемента объекта будет выполнять эту самоисполняющуюся анонимную функцию и будет проверять, равна ли длина обоих массивов (имя и возраст) или нет, если не равно, то выдаст ошибку …..Мне нужно что-то вроде
let obj = {
name:["Harry","Scren","Docis","Altab"],
age:[32,44,22,55],
(function(){
if(name.length != age.length){
throw new Error('both name and age 's length are not equal')
}
}()) // But this is not possible to create in object I have just showed down what I wanted to create
}
Как создать что-то подобное в объекте javascript ??
Комментарии:
1. Просто поместите IIFE вне литерала объекта и передайте obj.
2. Я почти уверен, что это проблема XY , и реальный ответ-это геттеры и сеттеры или прокси -сервер.
3. Зачем вам это нужно, если вы сами написали, что такое массивы? Можете ли вы привести динамический пример, в котором это имело бы смысл? Кроме того, у вас есть проблема синтаксиса со строковыми литералами.
4. Единственная проблема-это данные. Если имя и возраст связаны, используйте структуру, похожую на карту, как предложено в ответе. Вы также можете создать функцию проверки, чтобы проверить данные и выдать ошибку, если она неверна.
Ответ №1:
Я не уверен, но думаю, что это невозможно… Но позвольте мне задать вопрос: почему у вас есть объект, содержащий два массива? Разве не имеет смысла иметь массив obj, каждый элемент которого содержит одно имя и один возраст? Я покажу тебе
const people = [
{ name: "Pearson 1", age: 20 },
{ name: "Pearson 2", age: 20 },
{ name: "Pearson 3", age: 20 },
{ name: "Pearson 4", age: 20 },
]
Таким образом, вам не нужно проверять длину, так как каждый объект имеет свое собственное поле имени и возраста.