У вас уже есть блок if, чтобы проверить, является ли он действительным пользователем, почему бы не использовать его, чтобы проверить, установлено ли first_name
?
Что касается добавления объекта в начале массива, вы могли бы используйте для этого оператор расширения. ([newElement, ...array]
)
class UserList {
constructor(users) {
this.users = users;
}
add(newUser) {
if (typeof newUser === 'object' && newUser.first_name) {
users = [{id: users.length, ...newUser}, ...users];
console.log(`Hello everyone i am ${newUser.first_name}`);
} else {
console.log('Please add object where first_name field is required!');
}
}
}
РЕДАКТИРОВАТЬ:
Поскольку Линшлагер быстро указал, вы можете даже сделать его однострочным, создав новый объект из id: users.length
и расширения объекта newUser
.
Я спустился по подобному маршруту к danb, но столкнулся с проблемами, на самом деле распечатав получающийся XML. Затем я понял, что NodeList, который был возвращен путем просьбы корня весь, его - "автомобильные" дети, не тот же список, поскольку Вы добираетесь, просто прося детей корня. Даже при том, что они, оказывается, те же списки в этом случае, они не всегда были бы то, если бы не было "автомобильных" детей под корнем. Из-за этого, reording список автомобилей, которые возвращаются из запроса, не влияет на первоначальный список.
Вот решение, которое добавляет и переупорядочивает:
def CAR_RECORDS = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'/>
<car name='P50' make='Peel' year='1962'/>
<car name='Royale' make='Bugatti' year='1931'/>
</records>
'''
def carRecords = new XmlParser().parseText(CAR_RECORDS)
def cars = carRecords.children()
def royale = cars.find { it.@name == 'Royale' }
cars.remove(royale)
cars.add(0, royale)
def newCar = new Node(carRecords, 'car', [name:'My New Car', make:'Peel', year:'1962'])
assert ["Royale", "HSV Maloo", "P50", "My New Car"] == carRecords.car*.@name
new XmlNodePrinter().print(carRecords)
Утверждение с продерзко заказанными автомобильными передачами и выводы XmlNodePrinter:
<records>
<car year="1931" make="Bugatti" name="Royale"/>
<car year="2006" make="Holden" name="HSV Maloo"/>
<car year="1962" make="Peel" name="P50"/>
<car name="My New Car" make="Peel" year="1962"/>
</records>
Тед, возможно, Вы не заметили, что я хотел к, '''вставляют новый автомобиль сразу после автомобиля "HSV Maloo"''', таким образом, я изменяю Ваш код к:
def newCar = new Node(null, 'car', [name:'My New Car', make:'Peel', year:'1962'])
cars.add(2, newCar)
new XmlNodePrinter().print(carRecords)
теперь, это работает с надлежащим порядком! благодаря danb и Теду.
<records>
<car year="1931" make="Bugatti" name="Royale"/>
<car year="2006" make="Holden" name="HSV Maloo"/>
<car name="My New Car" make="Peel" year="1962"/>
<car year="1962" make="Peel" name="P50"/>
</records>
<ручная волна> это не codz, который Вы ищете </hand-wave>
Node root = new XmlParser().parseText(CAR_RECORDS)
NodeList carNodes = root.car
Node royale = carNodes[2]
carNodes.remove(royale)
carNodes.add(0, royale)
carNodes.add(2, new Node(root, 'car', [name:'My New Card', make:'Peel', year:'1962']))
Я не знаю, существует ли более умный способ создать новые узлы..., но это работает на меня.
Править: uhg... спасибо, ребята... Я стал ленивым и печатал carNodes, когда я протестировал это вместо корня... черт.