var user = {};
var usernameList = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr');
for (i of usernameList) {
if (i.childNodes[0].nodeName === 'SPAN') {
var theUser = (user[i.childNodes[0].innerHTML] !== undefined) ? user[i.childNodes[0].innerHTML] : user[i.childNodes[0].innerHTML] = {};
var msg = theUser.msg = [];
msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
}
}
对象user.whatever.msg
是一个数组,但只包含1个值。所以它始终是最后一个。在这种情况下,push
不起作用,因此我无法将所有值都放入该数组中。
我的代码出了什么问题?
答案 0 :(得分:1)
theUser.msg = [];
会在每次迭代时创建一个新数组。就像您只创建一个新的theUser
对象时,您应该只创建一个msg
数组。
var users = {};
var usernameList = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr');
for (var i of usernameList) {
if (i.firstChild.nodeName === 'SPAN') {
var name = i.firstChild.innerHTML; // should be .textContent probably
var theUser = name in user
? user[name]
: user[name] = { msg: [] };
// ^^^^^^^^^
theUser.msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
}
}
答案 1 :(得分:1)
更明确的方法是使用@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class ClientCodeTest {
@Test
public void testDoSomething() {
PowerMockito.mockStatic(Utils.class);
BDDMockito.given(Utils.method1()).willReturn("<mock string value>");
}
}
:
.reduce
答案 2 :(得分:0)
您可以修改代码以验证数组是否已创建:
var user = {};
var usernameList = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr');
for (i of usernameList) {
if (i.childNodes[0].nodeName === 'SPAN') {
var theUser = (user[i.childNodes[0].innerHTML] !== undefined) ? user[i.childNodes[0].innerHTML] : user[i.childNodes[0].innerHTML] = {};
if(theUser.hasOwnProperty(‘msg’) === false) {
theUser.msg = [];
}
theUser.msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
}
}