0

I have my data object:

var elements = {
        'element' : {
            'name' : 'test',
                    'price' : '55'
        },
        'element' : {
            'name' : 'letev',
                    'price': '223'
        }
    };

Now, I don't know how can I find each element by name for example. I need to find element by name test, and then acces it's other parameters (price,..)

1
  • 1
    This object is impossible. Key names must be unique. Commented Feb 3, 2014 at 9:43

5 Answers 5

1

You must change elements to array:

var elements = [
    {
        'name' : 'test',
        'price' : '55'
    },
    {
        'name' : 'letev',
        'price': '223'
    }
];

function findElementByName(name, elementsForSearch) {
    if (name) {
        elementsForSearch.filter(function(elem){
            return elem.name === 'name';
        });
        return elementsForSearch[0];
    }
    return {};
}

alert(findElementByName('test', elements).name)
Sign up to request clarification or add additional context in comments.

2 Comments

use Array.filter. it's much easier to maintain.
Yes, thanks, it's ES 5.1,but checked it support (IE9+ and modern). I think I can use it :)
1

Assuming your object was an array instead of the syntax you used:

var elements = [
    {
        'name' : 'test',
        'price' : '55'
    },{
        'name' : 'letev',
        'price': '223'
    }
];

You can filter the element out like this:

searchName = 'test';
elements.filter(function(element){
    return element.name == searchName;
});

This will only return the elements that have 'test' as name.

Or as a function:

function filterByName(array, namr){
    array.filter(function(element){
        return element.name == name;
    });
}

Called like this:

array result = filterByName(elements, 'test');

In case you need to support IE 8 or lower, you can use a polyfill for Array.prototype.filter.

Comments

0

you can do that if your elements object was an array, i.e.

var elements = [{
        'element' : {
            'name' : 'test',
                    'price' : '55'
        },
        'element' : {
            'name' : 'letev',
                    'price': '223'
        }
    }];

var price;
for (var i=0; i  <elements.length; i++) { 
    if (elements[i].name === 'test') {
        price = elements[i].price;
        break;
    }
}

Comments

0

Try with:

var elements = [
  {
    'name' : 'test',
    'price' : '55'
  },
  {
    'name' : 'letev',
    'price': '223'
  }
];

var search = 'letev';
for (var i = 0; i < elements.length; i++) {
  if (elements[i].name == search) {
    alert('found!');
    break;
  }
}

Or using Array.filter:

var search = 'letev';
var output = elements.filter(function(element) {
  return element.name == search;
});

1 Comment

use Array.filter instead of manually iterating the results.
-1

Try this

var List= (JObject)JsonConvert.DeserializeObject(jsonstring);
    var result= List["element"].Children().Select(node => node["name"]== "Test").ToList();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.