2

Jquery の inArray 関数を使用して、配列内の重複するサブ配列の作成を停止する関数を作成しようとしていますが、機能していないようです。多分私は私のコードに何かが欠けていますか?

function createProduct() {
    var name = document.getElementById("productname").value
    var myclass = document.getElementById("productclass").value
    var model = document.getElementById("model").value
    var manufacturer = document.getElementById("manufacturer").value
    var sellingprice = document.getElementById("productsellprice").value
    var costprice = document.getElementById("productcostprice").value
    var quantity = document.getElementById("quantity").value
    productobject = [name, manufacturer, model, myclass, sellingprice, costprice, quantity];

    var searchvalue = productobject;
    *if (jQuery.inArray(productobject, products) == -1) { products.push(productobject) } else if (jQuery.inArray(productobject, products) != -1) {
        document.getElementById
            ("mydiv").innerHTML = "This product already exists, please check catalogue to edit product";
    }*
}

残りのコードブロックを追加して読みやすくしましたが、inArray関数を呼び出すifブロックに焦点を当てています。なぜなら、重複した製品がまだ追加されているからです

4

2 に答える 2

2

その存在を確認する前に常に新しい配列参照を作成しているため、配列への参照が配列内に既に存在するかどうかを if 条件で尋ねています。

新しい配列を作成するたびproductobject = [ ... ];に、プリミティブ値ではなくオブジェクト (この配列) をプッシュしているため、jQuery.inArrayメソッドはオブジェクト参照の存在を確認することしかできません。つまり、常に新しい配列を作成しているため、if 条件では常に見つからないということです。

編集
あなたがやろうとしていることの場合、私はJavascript連想配列を利用するかもしれません。配列の代わりにオブジェクトを使用するためにソリューションを作り直す方法の例を次に示します。メソッドを使用するより強力な方法については、JavaScript でオブジェクトにプロパティがあるかどうかを確認するにはどうすればよいですか?object.hasOwnPropertyを参照してください。

最後に、productobject.name プロパティを製品オブジェクトのルックアップ キーとして使用したことに注意してください。そのため、ボタンをクリックすると、最初のフィールドを変更した場合にのみ新しいオブジェクトが追加されます。

役に立てば幸いです >>

//objects are associative arrays (or maps/dictionaries) in Javascript
var products = {}; //new Object() instead of new Array()

function createProduct() {
    var productObject = { 
        name: document.getElementById("productname").value,
        myclass: document.getElementById("productclass").value,
        model: document.getElementById("model").value,
        manufacturer: document.getElementById("manufacturer").value,
        sellingprice: document.getElementById("productsellprice").value,
        costprice: document.getElementById("productcostprice").value,
        quantity: document.getElementById("quantity").value
    }
    return productObject;
}

function checkitout() {
    var product = createProduct();
    //assuming name is a unique ID or key you can use to distinguish products
    if(products.hasOwnProperty(product.name)) {
        alert("product already exists");
    } else {
        console.log("new product added");
        products[product.name] = product;
    }
}
<input id="productname" value="IBM Lenovo 9439-CTO" />
<input id="productclass" value="desktop" />
<input id="model" value="9439-CTO" />
<input id="manufacturer" value="IBM Lenovo" />
<input id="productsellprice" value="$50.00" />
<input id="productcostprice" value="$30.00" />
<input id="quantity" value="1" />
<button onclick="checkitout();">Add New Product</button>

于 2015-07-08T21:04:34.063 に答える