Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象中查找类似项_Javascript - Fatal编程技术网

Javascript 在对象中查找类似项

Javascript 在对象中查找类似项,javascript,Javascript,我有一个对象看起来是这样的: { title: "test", subtitle: "test", "list-item-1": "This is item 1", "list-item-2": "This is item 2", "list-item-3": "This is item 3" } 我想查找该对象中以-1或任何-数值结尾的所有键。然后以某种方式将所有这些项组合在一起,我可以通过调用类似“如果一个项的末尾有一个-1,找到所有具有相同第一部分

我有一个对象看起来是这样的:

{
    title: "test",
    subtitle: "test",
    "list-item-1": "This is item 1",
    "list-item-2": "This is item 2",
    "list-item-3": "This is item 3"
}
我想查找该对象中以
-1
或任何
-
数值结尾的所有键。然后以某种方式将所有这些项组合在一起,我可以通过调用类似“如果一个项的末尾有一个
-1
,找到所有具有相同第一部分的其他项(
在本例中为list item
),并将它们保存到它们自己的数组或变量中


我该怎么做呢?

首先,它不是一个数组——它是一个Javascript对象,但是它的格式不正确,因为项目之间没有逗号

您可以像这样遍历对象,并访问每个对象属性的名称,如下所示

for (item in obj) {
  if (obj.hasOwnProperty(item)) {
    // the 'item' variable is the name you are looking for.
    // use a regex pattern to match on -#.
  }
}

您可以使用
for..in
在对象键上迭代,然后只进行一些简单的字符串/正则表达式匹配

var new_obj = {};
// iterate over keys in object
for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        // ends in "dash number"
        if (key.match(/-\d+$/)) {
            // get new key by stripping off "dash number"
            var newkey = key.replace(/-\d+$/, "");
            // ensure new object has this property; make it an array
            if (!new_obj.hasOwnProperty(newkey)) {
                new_obj[newkey] = [];
            }
            // append original object item to this new property
            new_obj.push(obj[key]);
        }
    }
}

获取属性的一种简单方法是使用内置方法,如keys()、filter()和test()


这不是一个数组或有效的javascript。请发布有效的javascript,以便我们了解您在这里真正想要做什么。您的意思是这是一个实际的数组或对象上的属性吗?获得答案的第一步是问一个明确的问题。天哪,我不知道发布“无效”的内容是犯罪对不起,我误会了。我想这就是为什么我首先发布这篇文章的原因:寻求帮助……如果你问如何对数据结构做些什么,你需要发布一个有效的数据结构,否则我们无法知道你在问什么。在这种情况下,我们不知道你到底想做什么。你的标题是数组,但你的代码看起来有点像一个对象(虽然它缺少逗号,所以它甚至不是一个有效的对象)。好的,既然您已经将代码固定为有效对象(我必须删除一个尾随逗号),我已经编辑了您的标题,不再提及数组,因为没有涉及数组。好的,谢谢您的编辑。在我学习JS的过程中,“术语”是我一直在努力解决的问题。谢谢!但是,除了
“列表项-#”
之外,还可能需要对其他属性进行分组。因此,明确地说
/list item-\d+$/
是行不通的。但是我会处理这个问题,看看我是否能让它工作。这很酷,你只需要修改RegExp就可以处理这个变化。
var obj={
    title: "test",
    subtitle: "test",
    "list-item-1": "This is item 1",
    "list-item-2": "This is item 2",
    "list-item-3": "This is item 3",
};

var arrOK=Object.keys(obj).filter(/./.test, /list-item-\d+$/);
alert(arrOK); // shows: "list-item-1,list-item-2,list-item-3"