我正在尝试在刷新时生成包含随机对象的列表。现在,当我使用它时,它会在下面的列表中显示为“object Object”,但它不会生成新的列表。
var products = [{
name: 'Apple',
price: 1.00
}, {
name: 'Orange',
price: 1.20
}, {
name: 'Lemon',
price: 1.10
}];
document.write(products[Math.floor(Math.random() * 3)]);
<ul class="products">
<li>Apple: $1.00</li>
<li>Orange: $1.20</li>
<li>Lemon: $1.10</li>
</ul>
答案 0 :(得分:1)
因为document.write
期待一个字符串,但是你传递了一个数组对象。
你可以这样使用JSON.stringify
:
var products = [{
name: 'Apple',
price: 1.00
}, {
name: 'Orange',
price: 1.20
}, {
name: 'Lemon',
price: 1.10
}];
document.write(JSON.stringify(products[Math.floor( Math.random() * 3 )]));
答案 1 :(得分:1)
var object = products[Math.floor(Math.random() * 3)];
document.write(object.name + ': ' + object.price);
现在,为了有趣的部分:如何以随机顺序显示whoe列表。首先我将复制你的数组,然后将使用mixin函数,最后将显示它。这个功能可以通过多种方式完成。
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex ;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
var newArr = shuffle(products.slice(0)); // will shuffle copy of your array (optional)
for (var i=0; i< arr.length;i++){
document.write(newArr[i].name + ': ' + newArr[i].price);
}
更好的解决方案是创建索引数组。每次你调用一个选择随机索引的方法时,你都会显示它。之后,您将从索引数组中删除它,以便每次显示记录时索引数组都会变小。最后它将为空,您的功能将结束。
答案 2 :(得分:0)
尝试将document.write
语句包装在JSON.stringify
中,这会将对象字符串化为可打印的字符串:
document.write (JSON.stringify(products[Math.floor( Math.random() * 3 )]));