Вам понадобится объект и .each
(или .forEach
в родном массиве).
var inputsContainer = $('.inputs-container');
var inputValues = {};
var inputValues = inputsContainer.find('input.multicheckbox-item').each( function() {
inputValues[$(this).attr('name')] = ($(this).prop('checked') ? 1 : 0);
});
console.log(inputValues);
increment_item()
принимает Container
по ссылке, и item
нельзя перемещать (или «использовать»), пока оно находится за ссылкой, поскольку increment()
принимает Item
по значению. Самый быстрый способ исправить это - сделать Item
типом Copy
. Это запустит копию, а не движение (т. Е. Потребляет). детская площадка
#[derive(Clone, Copy)]
struct Item {
x: u32,
}
...
...
Для получения дополнительной информации, пожалуйста, обратитесь Копировать
Item::increment
ожидает self
по значению, оно перемещает Item
, на котором оно вызывается. Container::increment_item
берет &mut self
по ссылке, он позволяет изменять self
, но не позволяет вам вступать во владение self
(или любой из его частей). self.item.increment(amount)
, вы пытаетесь передать значение self.item
по значению, тем самым перемещая владение в функцию Item::increment
, но вам не разрешено делать это со ссылками на значения, которыми вы не владеете. Просто передайте self
в Item::increment
по изменяемой ссылке, вот для чего нужны изменяемые ссылки:
struct Item {
x: u32,
}
impl Item {
pub fn increment(&mut self, amount: u32) {
self.x += amount;
}
}
struct Container {
item: Item,
}
impl Container {
pub fn increment_item(&mut self, amount: u32) {
self.item.increment(amount);
}
}
Если вы настаиваете на том, чтобы стать владельцем Item
, тогда вы можете используйте mem::replace
:
use std::mem;
struct Item {
x: u32,
}
impl Item {
pub fn increment(self, amount: u32) -> Self {
Item { x: self.x + amount }
}
}
struct Container {
item: Item,
}
impl Container {
pub fn increment_item(&mut self, amount: u32) {
self.item = mem::replace(&mut self.item, Item { x: 0 }).increment(amount);
}
}
, но это кажется излишне сложным в этом случае.