我有两个Object
并希望合并这两个对象。一个对象在 ADD TO CART 部分click
之后创建,然后我将此对象存储到localstorage
,第二个对象从localstorage
获得,现在我想合并这两个{点击后{1}}这是我的代码:
object

/***********************************RESTORE CART *********************************************/
var html = '';
var p = 0;
var q = 0;
//var cartS = JSON.parse(localStorage.getItem("cart"));
// for remove error I managed to set empty object
var cartS = new Object();
$.each(cartS, function(i, v) {
html += '<div class="cart-item" data-id="' + cartS[i].id + '">' + cartS[i].title + '<span> × ' + cartS[i].quantity + '</span> ' + cartS[i].price + ' $</div>';
p += Number(cartS[i].price * cartS[i].quantity);
q += cartS[i].quantity;
});
$('#cart').empty().html(html);
$('#total').empty().html('Total price: ' + p + ' $');
$('#count').empty().html('Total Items: ' + q);
/***********************************ADD TO CART *********************************************/
const cart = {};
$('li').click(function(e) {
const id = e.target.dataset.id;
const title = $(this).text();
const price = e.target.dataset.price;
var html = '';
var p = 0;
var q = 0;
if (!cart[id]) cart[id] = {
id,
title,
price,
quantity: 0
}
cart[id].quantity++;
$.each(cart, function(i, v) {
html += '<div class="cart-item" data-id="' + cart[i].id + '">' + cart[i].title + '<span> × ' + cart[i].quantity + '</span> : ' + cart[i].price + ' $</div>';
p += Number(cart[i].price * cart[i].quantity);
q += cart[i].quantity;
});
$('#cart').empty().html(html);
$('#total').empty().html('Total price:' + p + ' $');
$('#count').empty().html('Total Items: ' + q);
//localStorage.setItem("cart", JSON.stringify(cart)); // store objects in localstorage
});
&#13;
#total {
color: green;
}
a {
display: block;
}
.cart-item {
background: #ffe1e1;
margin-bottom: 1px;
padding: 5px;
}
&#13;
我尝试了什么:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li data-id="1" data-price="50">Product 1</li>
<li data-id="2" data-price="25">Product 2</li>
<li data-id="3" data-price="15">Product 3</li>
<li data-id="4" data-price="50">Product 4</li>
</ul>
<div id="cart"></div>
<br><br>
<a id="total"></a>
<a id="count"></a>
此外:
Array.prototype.push.apply(cart,cartS);
但它不会合并。
请注意,代码段会返回错误,因为SO不支持$.merge( cartS, cart );
。
目标:
我点击后创建对象,并将其存储在localstorage上,然后在页面重新加载后,我从localstorage获得了对象,现在想要用户点击,将当前对象与我从localstorage获得的第二个对象合并。它与购物车类似。
答案 0 :(得分:2)
@Injectable()
export class UtilsService {
constructor( private _api: ApirequestService ) { }
getItems(url, data, succFunc?: (data) => void, errFunc?: (err) => void, compFunc?: () => void) {
return this._api.fetchApiData(url,data).subscribe(
data => {
if( succFunc != undefined && typeof succFunc == 'function' ) succFunc(data);
},
error => {
if( errFunc != undefined && typeof errFunc == 'function' ) errFunc(error);
},
() => {
if( compFunc != undefined && typeof compFunc == 'function' ) compFunc();
}
)
}
和cartS
都是对象而不是数组。不要使用仅适用于数组的cart
,而应考虑使用$.extend
:
$.merge
答案 1 :(得分:2)
$.merge()
用于合并两个数组。 cart
和cartS
是普通对象,而不是数组。
但是为什么你还有两个单独的购物车对象?您可以直接更新您从localStorage中读取的对象。
答案 2 :(得分:0)
您可以使用Object.assign方法合并两个对象。
let newObject = Object.assign(cart, cartS)