简体   繁体   English

筛选对象

[英]Filter an Object

I'm hoping someone will point me in the right direction or give me an example. 我希望有人能指出正确的方向或给我一个例子。 I'm trying to filter through this multidimensional json object using a form with four filter options (see below). 我正在尝试使用具有四个过滤器选项的表单来过滤此多维json对象(请参见下文)。

After the user makes their selections and hits the submit button the results of that product or service's details are displayed on the page (ie...link to that product, content of that product), there can also be more than one product or service to display based on the search filter. 在用户做出选择并单击“提交”按钮之后,该产品或服务的详细信息的结果就会显示在页面上(即...链接到该产品,该产品的内容),也可以有多个产品或服务根据搜索过滤器显示。 Can someone please help me out? 有人可以帮我吗?

Here is my object: 这是我的对象:

var data = {
        "Product":{"url":["http://www.google.com"],"mode":["gyro"],"modeOptions":["drop-controlled-descent","seated-wireline-steering","slickline-memory","surface-readout-ms","wireline-orientation"],"diameter":{"usa":"1.75","intl":"44.5mm"},"accuracy":{"usa":"0.5 deg","intl":"0.5 deg"},"temp":{"usa":"400F","intl":"204C"},"speed":{"usa":"250 ft\/min","intl":"76.2m\/min"}},
        "Service":{"url":["http://www.google.com"],"mode":["gyro"],"modeOptions":["drop-controlled-descent","seated-wireline-steering","slickline-memory","surface-readout-ms","wireline-orientation"],"diameter":{"usa":"(2.2)","intl":"(55.9mm)"},"accuracy":{"usa":"0.15 deg","intl":"0.15 deg"},"temp":{"usa":"(400F)","intl":"(204C)"},"speed":{"usa":"600 ft\/min","intl":"182.9m\/min"}}
        };

Her is my html form: 她是我的HTML表格:

<form name="searchForm" id="searchForm">
        <select name="diameter">
            <option value="" selected="">Select One</option>
            <option value="1.2">1.2</option>
            <option value="1.75">1.75</option>
            <option value="2.2">2.2</option>
        </select>
        <select name="accuracy">
            <option value="" selected="">Select One</option>
            <option value="0.15 deg">0.15</option>
            <option value="0.5 deg">0.5</option>
            <option value="1 deg">1</option>
            <option value="2.5 deg">2.5</option>
        </select>
        <select name="temp">
            <option value="" selected="">Select One</option>
            <option value="257F">257F</option>
            <option value="300F">300F</option>
            <option value="400F">400F</option>
        </select>
        <select name="modeOptions">
            <option value="" selected="">Select One</option>
            <option value="surface-readout-ms">Surface Readout/MS</option>
            <option value="wireline-orientation">Wireline Orientation</option>
            <option value="memory-orientation">Memory Orientation</option>
            <option value="slickline-memory">Slickline memory</option>
            <option value="drop-controlled-descent">Drop – Controlled Descent</option>
            <option value="drop–freefall-descent">Drop – Freefall Descent</option>
            <option value="seated-wireline-steering">Seated Wireline Steering</option>
        </select>
        <input type="submit" value="submit"/>
    </form>

Get TaffyDB. 获取TaffyDB。 It is made for these sorts of things. 它是为这类事情而设计的。

Try something like 尝试类似

var $form = $('#searchForm'),
    $diameter = $form.find('select[name="diameter"]'),
    $accuracy = $form.find('select[name="accuracy"]'),
    $temp = $form.find('select[name="temp"]'),
    $modeOptions = $form.find('select[name="modeOptions"]');
$('#searchForm').submit(function (e) {
    e.preventDefault();
    var diameter = $diameter.val(),
        accuracy = $accuracy.val(),
        temp = $temp.val(),
        modeOptions = $modeOptions.val();

    var selected = $.map(data, function (obj) {
        return (!diameter || diameter == obj.diameter.usa) && (!accuracy || accuracy == obj.accuracy.usa) && (!temp || temp == obj.temp.usa) && (!modeOptions || $.inArray(modeOptions, obj.modeOptions) > -1) ? obj : undefined
    });

    //print result
    console.log('found:', selected);
    $('#result').html($.map(selected, function (val) {
        return '<p>' + JSON.stringify(val) + '</p>'
    }))
})

Demo: Fiddle 演示: 小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM